2017-04-06 19 views
0

正規表現エンジンが後続の先読みステートメントで式を処理する方法を理解しようとしています。私は2つの例(javascriptの構文)で私の質問を最もよく説明できると思う。私の用語の使用がオフの場合、私を許してください。先読み無し次の正規表現の先読みステートメント

例:

/a(.*b)(.*c)/

これはいくつかの点でいくつかの点でc続いてb、続いていること、aを含む式と一致するであろう。したがって、第2の原子グループ(.*c)は、第1の原子グループ(.*b)に「適用する」。 abcはこの式を満たしますが、acbは満たされません。先読みと

例:

/a(?=.*b)(?=.*c)/ == /a(?=.*c)(?=.*b)/

それはbによっていくつかの時点で続いている場合、これは、aに一致し、それはまたによってある時点で続いていますc。したがって、両方の原子グループは、順序にかかわらずa文字に適用されます。aabcacbの両方で一致します。

だから私は、正規表現エンジンが先読みを扱うことを推測グループは異なり、彼らは他のグループを扱う(そして後読み?) - 彼らは先読みに遭遇するたびに後に戻っ「メイン」という表現(この場合はa)に行くのですか?

ご協力いただきありがとうございます。

+1

はい。先読みは「ゼロ幅アサーション」です。一致が失敗する可能性がありますが、実際には一致しません。 – Ryan

答えて

0

ルックアラウンドは実際に文字と一致しますが、結果を返すだけで一致するか一致しません。

詳細はhereです。

関連する問題