0

Googleのre2ライブラリでlongest_matchオプションが何をするのか理解できません。

正しくない説明:

  • に適用/a*/する場合、longest-matchを設定すると、Kleeneクロージャが貪欲になり、正規表現が空の文字列ではなく"aaaaa"文字列全体と一致するようになります。"aaaaa"""

  • に適用/a*/する場合、longest-matchを設定すると、左端の一致(インデックス0から開始)ではなく"abaa"、最も長い一致(インデックス2から開始)に正規表現が一致します。"aa""a"

これについて話し合っている人をインターネット上で見つけることができませんでした。これは、私だけが混乱していることを示唆しています。誰かが私を助けることができますか?

4

1 に答える 1

0

通常、POSIX正規表現は、左端の最長の一致を返します。つまり(ほとんどの正規表現実装のデフォルトの動作である最初の一致のみを検索すると仮定すると)、左端(位置0)が一致するため、適用されると正規表現/a*/が返されます。正規表現は、位置2に続くものを見る前に成功を宣言します。"a""abaa"aaa

他の正規表現ライブラリ(PCREなど)は、最初に一致する可能性のあるものを返します。たとえば、

a(b|bb)

最初の交互がすでに一致しているため、"ab"文字列内で一致します。"abb"

re2今はライブラリがわかりませんが、このlongest_matchオプションは文字列から可能なすべての一致を収集し、そのうちの最も長いものを返すと思います。

于 2011-08-29T15:10:37.317 に答える