正则表达式用于查找字符串的一部分而不是另一部分的匹配

时间:2013-08-27 18:03:07

标签: java regex

(appendCsrfToken).+(\.do\?\w)
像...这样的字符串匹配 document.forms[0].action = appendCsrfToken("search.do?lname=Smith");

我想要做的是查找具有.do?部分但没有appendCsrfToken部分的字符串。例如......
document.forms[0].action = "search.do?lname=Smith";

我认为下面的否定会起作用,但是当我测试它时,我没有得到任何匹配 (^appendCsrfToken).+(\.do\?\w)

如何正确否定appendCsrfToken以获得我正在寻找的匹配?

2 个答案:

答案 0 :(得分:4)

使用^进行否定仅适用于字符类。你需要一个lookahead。最简单的方法是从字符串的开头(^)一直查看appendCsrfToken并使用否定的预测。如果可行,请继续并匹配do?

^(?!.*appendCsrfToken).*(\.do\?\w)

Demo.

答案 1 :(得分:0)

你也可以使用负面的lookbehind。这是解决方案

^(?<!.*appendCsrfToken).*(\\.do\\?\\w)