4

このリンクから、これら 2 つの境界一致が非常に似ていることがわかります: \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 は文字列の先頭から検索を開始し、最初の一致が終了した後も検索を続けます。

^ 検索の開始時に一致が見つかった場合、検索が終了すると 1 つの結果のみが返されます。

于 2013-07-11T08:08:41.953 に答える
2

javadocs で説明されているとおりです。

\G - 前のマッチの終わり

^ - 行頭

dogdogdog、などの文dogdogdogを と の両方で\G試してみてください\^。最初の 1 つだけを検索し\Gながら、さまざまな位置にある犬の一致を検索します。^

あなたの質問はなぜですか^\Gは という文に似ていdog dogます。これは、最初の一致が\Gインデックスから0 to 3開始され、2 番目の一致がインデックス3以降から開始されるためであり、2 番目の一致は失敗し<space>dogないためです。dog

于 2013-07-11T08:07:35.447 に答える