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 匹配 (?=\\.)
.
位置 3 匹配 (?<=\\.)
.
关于java - 单独使用时正则表达式环视如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31888984/