2014-12-04 27 views
-1

我有一個Java程序,並在我的代碼的一部分我要讀這樣,^s(group1) ^s(group2)一個字符串,然後返回字符串「組1」和「組2」,所以我用這個正則表達式\^s\(.*\)但它返回整個字符串。如何在正則表達式中執行此操作?

怎麼了?

+2

也許谷歌上搜索了一下,將有助於... :) – 2014-12-04 18:22:28

+0

這是我不知道google一下:/ – 2014-12-04 18:24:40

+0

https://docs.oracle.com/javase/tutorial /essential/regex/intro.html – nLee 2014-12-04 18:26:20

回答

1

.*匹配)所以比賽不會在右括號停止。如果您想要針對嵌套括號組進行額外保險,請嘗試[^\)]*[^\(\)]*

你也可以考慮使用非貪婪的改性劑,.*?,這也將解決這個問題。有些人發現比一個否定字符集匹配更可讀。

+0

很好的問題,這兩個那就是它非常符合第一組http://regexr.com/3a14v – 2014-12-04 18:37:54

+0

@GonzaloRizzo,還有第二個問題。請參閱我的編輯。 – 2014-12-04 18:48:13

+0

這不應該是一個問題,因爲我沒有寫過^ y寫過^因爲我想匹配^字符 – 2014-12-04 18:52:21

0

您可以提取這些詞與groups

\^s\((.*?)\)

這是說捕捉^ s的任何東西(),並可以這樣使用。

String str = "^s(group1) ^s(group2)"; 
Matcher m = Pattern.compile("\\^s\\((.*?)\\)").matcher(str); 

while (m.find()) { 
    System.out.println(m.group(1)); 
} 

輸出

group1 
group2