正規表現エンジンが後続の先読みステートメントで式を処理する方法を理解しようとしています。私は2つの例(javascriptの構文)で私の質問を最もよく説明できると思う。私の用語の使用がオフの場合、私を許してください。先読み無し次の正規表現の先読みステートメント
例:
/a(.*b)(.*c)/
これはいくつかの点でいくつかの点でc
続いてb
、続いていること、a
を含む式と一致するであろう。したがって、第2の原子グループ(.*c)
は、第1の原子グループ(.*b)
に「適用する」。 abc
はこの式を満たしますが、acb
は満たされません。先読みと
例:
/a(?=.*b)(?=.*c)/
== /a(?=.*c)(?=.*b)/
それはb
とによっていくつかの時点で続いている場合、これは、a
に一致し、それはまたによってある時点で続いていますc
。したがって、両方の原子グループは、順序にかかわらずa
文字に適用されます。a
はabc
とacb
の両方で一致します。
だから私は、正規表現エンジンが先読みを扱うことを推測グループは異なり、彼らは他のグループを扱う(そして後読み?) - 彼らは先読みに遭遇するたびに後に戻っ「メイン」という表現(この場合はa
)に行くのですか?
ご協力いただきありがとうございます。
はい。先読みは「ゼロ幅アサーション」です。一致が失敗する可能性がありますが、実際には一致しません。 – Ryan