4

私は最近正規表現を調べていて、?演算子が*+、または?怠惰になると考えました。私の質問は、どのようにそれを行うのですか? *?たとえば、特別な演算子ですか、それとも?に影響があり*ますか? つまり、正規表現*?はそれ自体を 1 つの演算子として認識しますか、それとも正規表現*?は 2 つの別個の演算子*と? として認識し?ますか? 2 つの別個のオペレーターとして認識されている場合、それを遅延させるに*?はどのような?影響がありますか。*if?*がオプションであることを意味しますが、これは*がまったく存在する必要がないことを意味するべきではありません。だったら声明で.*?正規表現は、短い文字列ではなく、個別の文字と文字列全体に一致しませんか? 説明してください、私は理解しようと必死です.どうもありがとう.

4

4 に答える 4

3

次のテキストがあるとします。

BAAAAAAAAD

次の正規表現が返されます。

/B(A+)/ => 'BAAAAAAAA'
/B(A+?)/ => 'BA'
/B(A*)/ => 'BAAAAAAAA'
/B(A*?)/ => 'B'

「?」の追加 + および * 演算子を「怠惰」にします。つまり、式が真になるために必要な絶対最小値に一致します。一方、デフォルトでは、* および + 演算子は「貪欲」であり、式が true になるように可能な限り一致しようとします。

+ は「1 つ以上」を意味するため、最小値は「可能であれば 1 つ、絶対に必要な場合はそれ以上」、最大値は「可能であればすべて、絶対に必要な場合は 1 つ」になります。

* は「ゼロ以上」を意味するため、最小値は「可能であれば何も、絶対に必要な場合はそれ以上」、最大値は「可能であればすべて、絶対に必要な場合はゼロ」になります。

于 2013-07-01T08:23:16.187 に答える
0

これは実装に大きく依存していると思います。しかし、私が知っているすべての量指定子は変更できる?ため、そのように実装するのが合理的かもしれません。

于 2013-07-01T08:23:38.073 に答える