2011-04-26 241 views
2
String text = "ref=\"ar\" alias=\"as sa\" value=\"asa\""; 

其實我想得到引用和別名的雙引號之間的所有數據的值。也構建了正則表達式。但是我面臨的概率是別名,它不匹配第一個雙引號,而是最後一個。我只想高達第一個雙引號Java正則表達式第一個匹配字符

String patternstr="(alias=\".*\")|(ref=\"[[\\w]]*\")";  
String patternstr2Level="\".*\""; 

在第一個匹配的兩個參數將被收購,在將被收購

在引號中的第二匹配數據數據

當前結果:

「AR」

「爲sa」 的值= 「ASA」

所需的結果:

「AR」

「爲SA」

+0

您的問題已得到解答,但似乎可以通過[StreamTokenizer](http://download.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html)更好地解決您的問題。 – 2011-04-26 08:27:21

回答

5

你只需要讓你的比賽有點懶惰。我相信

String patternstr="(alias=\".*?\")|(ref=\".*?\")"; 

應該做的伎倆。通過使用.*?而不是僅僅.*,比賽的那部分變得懶惰。換句話說,它會嘗試匹配找到的第一個雙引號,而不是匹配儘可能多的內容,直到到達最後一個雙引號。我用Python測試了它,它工作得很好。

+0

@ justin-peel感謝它的完美運作 – arvindwill 2011-04-26 08:36:20

+0

沒問題。如果這個答案對你來說足夠好,那麼請繼續點擊問題左側的複選標記,以便將此問題標記爲已回答。 – 2011-04-26 15:34:15

0

嘗試String patternstr="(alias=\"[\\w\\s]*\")|(ref=\"[[\\w]]*\")";

+0

謝謝,要求的結果 – arvindwill 2011-04-26 08:41:45