4

我从这个链接中看到这两个边界匹配非常相似: \G^.

我还看到了他们在同一链接\G末尾显示的示例。

    Enter your regex: dog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.
I found the text "dog" starting at index 4 and ending at index 7.

Enter your regex: \Gdog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.

与没有边界匹配器相比,这非常清楚,但是:

Enter your regex: \Gdog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.

对比

Enter your regex: ^dog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.

2之间有什么细微的区别?

4

2 回答 2

3

这解释了 \G

https://forums.oracle.com/thread/1255361

\G 从字符串的开头开始搜索,并在第一个匹配结束后继续搜索。

如果在搜索开始时找到匹配项,^ 只会在搜索结束时给出一个结果

于 2013-07-11T08:08:41.953 回答
2

如javadocs中所述:

\G - 上一场比赛的结束

^ - 一行的开头

用and尝试像dog, dogdog,dogdogdog等这样的句子。会在不同位置找到匹配的狗,而只会找到第一个。\G\^\G^

至于你查询为什么^\G句子相似dog dog。这是因为第一个匹配\G将来自索引0 to 3,第二个匹配将从索引3开始,<space>dog而不是dog因此第二个匹配失败。

于 2013-07-11T08:07:35.447 回答