0

必須の文字と許可された文字を含む単語全体を一致させたい。

たとえば、
必須の文字は次のとおりです: [ c , a , t ]
許可された文字は次のとおりです: [ y , s]

cat   : passed (all mandatories are here)
caty  : passed (all mandatories here and only allowed "y" char)
casy  : failed (mandatory 't' is absent)
catso : failed (all mandatories but an intruder "o")

これに適切な REGEX コードは何ですか?

4

2 に答える 2

3

正規表現フレーバーに先読み機能がある場合、この種のパターンでそれを行うことができます。

 \b(?=[a-z]*?c)(?=[a-z]*?a)(?=[a-z]*?t)[actys]+\b

バックトラックがあるため、ルックアラウンドはコストが高くなる可能性があることに注意してください。2 つのトリックを使用して制限できます。

1) 文字クラスに対してより多くの制約を使用する:

\b(?=[a-bd-z]*c)(?=[b-z]*a)(?=[a-su-z]*t)[actys]+\b

2) 所有量指定子の使用 (サポートされている場合)

\b(?=[a-bd-z]*+c)(?=[b-z]*+a)(?=[a-su-z]*+t)[actys]++\b

またはアトミック グループの代わりに:

\b(?=(?>[a-bd-z]*)c)(?=(?>[b-z]*)a)(?=(?>[a-su-z]*)t)(?>[actys]+)\b
于 2013-06-09T18:20:53.903 に答える