String text = "$.example(\"This is the tes't\")";
final String quoteRegex = "example.*?(\"[^is].*?\")";
Matcher matcher0 = Pattern.compile(quoteRegex).matcher(text);
while (matcher0.find()) {
System.out.println(matcher0.group(1));
}
返回This is the tes't
。由于否定[^is]
表示与is
不匹配,我期待不返回任何结果。那么为什么
它正在返回This is the tes't
?
同样example.*?(\".*?\")
正则表达式返回This is the tes't
,但example(\".*?\")
不是为什么?
答案 0 :(得分:3)
[^is]
并未表示与is
不匹配,它表示匹配的字符不是i
或s
,而您的示例后面有T
"
所以匹配。
如果您想匹配零个或多个字符并排除字符串"is"
,您可以执行以下操作:
example.*?(\"(?:(?!is).)*?\")
如果您只想在is
之后立即与"
不匹配(不是您的示例):
example.*?(\"(?!is).*?\")
你也问为什么example(\".*?\")
不匹配;如果"
之后有example
,那么正则表达式只匹配,而您的示例之间有(
。您可以匹配(
但仍然使用以下内容捕获带引号的字符串:
example\((\"...