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

How regex lookaround works when used alone

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 的环视部分,并试图弄清楚它是如何工作的,但我被这个东西困住了。当我 运行 结果上面的代码是 ++ 时,我不明白,因为“。”是匹配模式的唯一标记,显然“.”后面或前面没有任何内容。那么怎么匹配两次呢?

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

您的输入有3个位置:

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

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