0

このチュートリアルから、「正規表現-数量詞」について学び、このチュートリアルで使用したこのテストコードに基づいています。

Enter your regex: a??
Enter input string to search: a
I found the text "" starting at index 0 and ending at index 0.
I found the text "" starting at index 1 and ending at index 1.

Enter your regex: a??
Enter input string to search: aaa
I found the text "" starting at index 0 and ending at index 0.
I found the text "" starting at index 1 and ending at index 1.
I found the text "" starting at index 2 and ending at index 2.
I found the text "" starting at index 3 and ending at index 3.

また

Enter your regex: a??
Enter input string to search: cab
I found the text "" starting at index 0 and ending at index 0.
I found the text "" starting at index 1 and ending at index 1.
I found the text "" starting at index 2 and ending at index 2.
I found the text "" starting at index 3 and ending at index 3.

なんで?

4

2 に答える 2

4

??は数量詞であるため、数量化された用語を何回一致させる必要があるか、0または1回、できれば0を示します。??それ自体は何にも一致しません。テストされた文字列でその式が何回一致するかを示すために、別の式を装飾するだけです。

式の残りの部分が遅延 部分一致と一致しない場合は、0 times部分一致で再試行し1 timeます。

確かに、正規表現全体が、ある用語の怠惰なオプションの一致のみで構成されている場合、テストされた文字列内の空の位置に常に一致します。したがって、この種の数量詞は、その周りに他の用語がある場合にのみ役立ちます。たとえば、式ba??dは最初に一致bdを試み、次に。を試みbadます。

それでも、正規表現が文字列内のすべての文字(および最後に1つ)に対して1回一致するのはなぜですか?空の一致は有効な正規表現です。たとえば、^または$(文字列の先頭、末尾)を検索すると、空ではありますが一致が生成されます。この「役に立たない」式の場合と同じように、テストされた文字列内のすべての位置は、一致に制約を課さない式の有効な一致です。

于 2013-01-08T08:19:54.087 に答える
0

これは、?演算子LAZYを実行し?ているため、可能な限り一致しなくなるためです。

0回または1回一致させようとしてaいますが、正規表現エンジンにできるだけ一致しないように指示しているため、0回一致し、文字列(+1)に含まれる文字の数と一致します。

于 2013-01-08T08:02:26.037 に答える