1
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环视部分,并试图弄清楚它是如何工作的,我坚持用这个东西环视工作。当我运行上面的代码的结果是++,我不明白,因为“。”是与这种模式相对应的唯一标志,显然在“”后面或前面没有任何东西。那么它如何匹配两次呢?如何正则单独使用时
@hwnd我的理解lookarounds并不消耗任何标记,但我不明白的是,没有任何标记在“。”之后或之前,因为我只有lookbehead和lookahead而不是\ \。在我编译的模式中,我认为它不应该匹配任何东西,但不知何故它会匹配两次。 – tareviverat
'^^^'由于[zero-width](https://regex101.com/r/rI5bH1/2)的位置,你得到两个匹配。 – hwnd
@hwnd对不起,不停地打扰你......不是零宽度意味着它是一个断言(应该有一段时间要么在前面,要么在当前位置后面),它不会消耗任何令牌(http:// stackoverflow.com/questions/3275375/zero-width-token)我不明白你的意思是零宽度的位置......你的意思是像“。”之前和之后的空白。 ? – tareviverat