2017-06-24 5 views
1

3つの部分で構成された非常に長い正規表現ですが、すべて必須ですが、少なくともそれらの1つの文字が一致しなければならない。少なくとも1つの文字が少なくとも3つの順序で一致しない場合は必須です。それ以外の場合は任意の正規表現

簡潔にするために、これら3つの長いセクション(A)、(B)、(C)を呼び出してみましょう。

(A)?(B)?(C)? 

もちろん、前提条件を強制することはありません:

現在、彼らはこのようにエンコードされます。

私は、私は1つの部分は必須作る各Orブランチに

((A)(B)?(C)?)|((A)?(B)(C)?)|((A)?(B)?(C)) 

を行うことができますことを、知っています。

しかし、これらの表現が本当に長いので、私はかなり混乱に終わるでしょう。

((A)?(B)?(C)?)に直接適用する修飾子がありますか(少なくとも1文字が一致していない場合は一致しません)。

答えて

2

先読みを使用して、セクションの少なくとも1つの存在を確認できます。

(?=A|B|C)(A)?(B)?(C)? 

次のシーケンスがAまたはBまたはCのいずれかである場合、これは、のみ一致します。それ以外の場合((A)?(B)?(C)?は空の文字列と一致します)、先読みのため一致がありません。

これは、シーケンスがシーケンスが2回チェックされているという欠点がありますが、その周りには実際にはわかりません。

+0

試しに+1してください(シーケンスの前後にあるものもあり、先読みを複雑にする可能性があります...) – Herb

関連する問題