您需要使模式的所有部分变得懒惰:
\('.*?',\s*('.*?:.*?').*?\)
^^^ ^^^ ^^^ ^^^
See the 正则表达式演示 https://regex101.com/r/yO1eT8/3.
Java演示 http://ideone.com/SOzzlx:
String t1 = "test1:testVar('varName', 'ns2:test')";
String t2 = "test2:testVar('varName', 'ns2:test', 'defValue')";
String patternString = "\\('.*?',\\s*('.*?:.*?').*?\\)";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(t1);
while (matcher.find()){
System.out.println(matcher.group(1));
}
matcher = pattern.matcher(t2);
while (matcher.find()){
System.out.println(matcher.group(1));
}
另一种方法是使用否定字符类,但如果您的输入比您发布的内容更复杂,则可能会导致问题:
\('[^',]*',\s*('[^',]*:[^',]*')
See a 正则表达式演示 https://regex101.com/r/yO1eT8/2, where [^',]
匹配除 a 之外的任何字符'
and ,
.