我有一个java程序,在我的代码的一部分中,我必须读取这样的字符串,^s(group1) ^s(group2)
,然后返回字符串" group1"和" group2"所以我使用了这个正则表达式\^s\(.*\)
,但它返回整个字符串。
出了什么问题?
答案 0 :(得分:1)
.*
匹配)
,因此匹配不会在右括号处停止。如果您想要针对嵌套的括号组提供一些额外保险,请尝试使用[^\)]*
或[^\(\)]*
。
您还可以考虑使用非贪婪的修饰符.*?
,这也可以解决问题。有些人发现它比可否定的字符集匹配更具可读性。
答案 1 :(得分: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