为什么否定不在这里工作?

时间:2018-05-28 05:45:41

标签: java regex

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(\".*?\")不是为什么?

1 个答案:

答案 0 :(得分:3)

[^is]并未表示与is不匹配,它表示匹配的字符不是is,而您的示例后面有T "所以匹配。

如果您想匹配零个或多个字符并排除字符串"is",您可以执行以下操作:

example.*?(\"(?:(?!is).)*?\")

如果您只想在is之后立即与"不匹配(不是您的示例):

example.*?(\"(?!is).*?\")

你也问为什么example(\".*?\")不匹配;如果"之后有example,那么正则表达式只匹配,而您的示例之间有(。您可以匹配(但仍然使用以下内容捕获带引号的字符串:

example\((\"...