java - 使用零宽度断言负先行匹配包含字符串 "abc"的字符串

标签 java regex perl regex-lookarounds

大家好: 我正在尝试使用零宽度断言负前瞻来匹配包含字符串“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/

相关文章:

python - 正则表达式搜索 Pandas 数据框中的整列

java - 即使在使用 synchronized() 之后,字符串也没有按顺序显示

java - 如何在循环中填充 json 数组

java - org.apache.batik.transcoder.TranscoderException : null Premature end of file

Java - while 循环中的中断不起作用

c++ - 向 C++ 文件添加命名空间的脚本

java - 如何在Java中转换重音字符

perl - 如何在出现 "Wide character in print at X line Y"消息时立即退出 Perl 程序?

linux - 在使用 perl 的 expect 发送命令之前,如何正确地等待终端中的提示?

linux - 如何从perl中的文本文件中读取密码