2

これまでのところ、正規表現で消極的な量指定子を使用したことがなく、サイトのいくつかの質問を見て、その機能とその使用法を理解しています。同様の質問は非常に説明的ですが、 Javaチュートリアルの例とどのように関連付けられているかまだ理解できません。私は、消極的な数指定子が一致するケースが可能な限り少ないことを理解しています。では、正規表現が

".*?foo"

文字列で

"xfooxxxxxxfoo"

"xfoo"および"xxxxxxfoo"?の 2 つの一致を返します。

また、所有量指定子の説明も不十分なので、誰かが正規表現の理由を説明できますか

".*+foo"

同じ文字列で何にも一致しませんか?

4

1 に答える 1

3

セクションのチュートリアルページの「貪欲、消極的、および所有量指定子の違い」の説明は、私には非常に明確に思えます。わからない部分は?

特定の質問に答えるには:

  • pattern".*?foo"の場合、消極的な量指定子 ( .*?) は最初は何も取得しません。パターンの残り ( foo) は一致しません。照合は、消極的な量指定子に戻り、1 文字 ( x) を取得します。パターンの残りの部分が一致します。その後、パターン全体が再び開始され (最初の の後) 、2 番目の の前のすべての文字"foo"を取得するまで一致しません。その時点で 2 番目の一致があります。xfoo

  • パターン ( ".*+foo") の場合、所有量指定子 ( .*+) は可能なすべての入力を取得し (何にでも一致するため) 、パターンの一部"."に一致するものは何も残っていません。"foo"は所有格であるため".*+"、何も返されません。したがって、貪欲な量指定子とは異なり、一致が所有量指定子に戻ると、単純に失敗します。

于 2013-04-28T13:15:42.823 に答える