Java 正则表达式边界匹配器

Java regular expressions boundary matchers

我正在阅读The Java™ Tutorials, Regular Expressions, Boundary Matchers。 如何在上一场比赛结束后找到 dog,但在字符串开头时找不到。

例如: \Gdog 将在 dogdog 中找到 2 个匹配项,但我不想捕获第一个 dog,因为它不在上一个匹配项之后(没有上一个匹配项)。

为什么 \Gdog 匹配第一个 dog 而我们没有上一个匹配项?

还有一个问题:输入开始有特殊符号:\A。我怎样才能否定它的意义,即"not at the start of the input"。我试过 \a,但这没有用。还有,\a 是什么意思?

提前致谢。

\G 标记的文档不足。在第一个匹配中,因为它没有 "previous match",所以它在字符串的开头匹配。所以它的实际含义是"match either at the beginning of input or after the previous match".

您应该注意,如果 \Gdog 在字符串的开头不匹配,则根本不会匹配 "dogdog"。第一个 "dog" 位于字符串的开头,因此不匹配。而第二只狗不匹配,因为第一只狗不匹配...

至于你的第二个问题,消极的回顾将允许你做与\A相反的事情:"(?<!\A)"。小写 "marker" 并不总是与大写 "marker" 相反。 Pattern documentation\a 列为 "the bell character",这意味着它将匹配输入中的 \u0007