java - 单独使用时正则表达式环视如何工作

标签 java regex regex-lookarounds

public class Test {
    public static void main(String[] args){
        Pattern a = Pattern.compile("(?=\\.)|(?<=\\.)");
        Matcher b = a.matcher(".");
        while (b.find()) System.out.print("+");
    }
}

我一直在阅读 Regular-Expressions.info 上的 Lookaround 部分,并试图弄清楚它是如何工作的,但我对这个东西很困惑。当我运行上面的代码时,结果是++,我不明白,因为因为“.”是与模式匹配的唯一标记,并且显然“.”后面或前面没有任何内容。那么它怎么能匹配两次呢?

最佳答案

当正则表达式引擎在输入中前进时,它会将字符字符之前和之后的位置视为输入中的不同位置。

您的输入有 3 个位置:

  1. 就在第一个字符之前
  2. 第一个字符
  3. 就在第一个字符之后

位置 1 匹配 (?=\\.) .
位置 3 匹配 (?<=\\.) .

关于java - 单独使用时正则表达式环视如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31888984/

相关文章:

java - 在 IE 中从 Java 调用 JavaScript 函数时出现访问被拒绝异常

java - 单击按钮后我的应用程序崩溃

python - Pandas 与 R 中相同的正则表达式但结果不同

regex - 有没有办法在正则表达式中使用 not (^) 来处理多个字符?

regex - 使用正则表达式前瞻,egrep

java - JList 修改后的 JDialog 重绘

java - 我将如何搜索二叉树以找到目标?

java - 用于选择 rtf 源的特定部分的正则表达式

regex - 在已编译的正则表达式中禁用捕获? (例如,Perl 5.22+,/n 修饰符)

javascript - 正则表达式在到达时停止检测链接