大家好: 我正在尝试使用零宽度断言负前瞻来匹配包含字符串“abc”的字符串,这就是我得到的:
Pattern pattern = new Perl5Compiler().compile("((?!abc).)+");
Perl5Matcher matcher = new Perl5Matcher();
System.out.println(matcher.matches("abc", pattern));
System.out.println(matcher.matches("abdas dfas", pattern));
System.out.println(matcher.matches("d abc ", pattern));
System.out.println(matcher.matches("fafabcdef", pattern));
结果是:
false
true
false
false
我无法理解的是为什么字符串“abc”不匹配,它在断言“abc”之后不包含任何字符。谁能弄清楚这是如何工作的?谢谢~
最佳答案
环顾四周开始在位置而不是角色上做事。因此,对于字符串 "abc"
,正则表达式的这一部分:(?!abc).
开始在位置 在您的字符串中的 "a"
之前。位置是"a"
之前的空串。这就是它无法匹配的原因。
关于java - 使用零宽度断言负先行匹配包含字符串 "abc"的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5429497/