我正在阅读Java™教程,正则表达式,边界匹配器。我怎么能找到dog
时,它是在之前的比赛结束后,而不是当它是在字符串的开始。
:Gdog
将在dogdog
中找到2个匹配,但我不想抓住第一个dog
,因为它不是在之前的匹配之后(没有之前的匹配)。
为什么Gdog
匹配第一个dog
,当我们没有前一个匹配?
还有一个问题:输入开始有一个特殊的符号:A
。我怎么能否定它的意义呢?"不是在输入的开始"。我试过了a
,但这不起作用。a
是什么意思?
G
标记文件不足。在第一个匹配中,因为它没有"前一个匹配",所以它在字符串的开头匹配。因此,它的实际含义是"在输入的开头或在前一个匹配之后匹配"。
您应该注意,如果Gdog
在字符串的开头不匹配,它将根本不匹配"dogdog"。第一个"狗"位于字符串的开头,因此不匹配。第二只狗不匹配,因为第一只狗不匹配…
至于你的第二个问题,一个消极的向后看将允许你做与A
相反的事情:"(?<!\A)"
。小写的"marker"与大写的"marker"并不总是相反的。Pattern
文档将a
列为"bell字符",这意味着它将匹配输入中的u0007
。