文字のプールがあり、正規表現を使用して、それらの文字またはそれらの文字のサブセットのアナグラムであるすべての単語を一致させたいと考えています。
例: 文字列 "ACNE" が与えられた場合、正規表現は次の結果を与えるはずです:
- にきび [T]
- セナ [T]
- できます [T]
- カーン[F]
- カネン [F]
私はこの解決策を試しまし/b[acne]{1,4}/b
たが、単一文字の複数回の繰り返しを受け入れます。各文字を最大 1 回取得するにはどうすればよいですか?
「acne」という単語のサブアナグラムは、次の単語です。
acne
a
複数回含まないc
複数回含まないn
複数回含まないe
複数回含まないこれを正規表現にコンパイルします。
^(?!.*a.*a)(?!.*c.*c)(?!.*n.*n)(?!.*e.*e)[acne]*$
テスト:正規表現
あるいは、「acne」には文字が 2 回以上含まれていないため、「acne」という単語のサブアナグラムは、次の単語になります。
acne
これを正規表現にコンパイルします。
^(?!.*(.).*\1)[acne]*$
テスト:正規表現
注: 「magmoid」という単語のサブアナグラムは、次のように一致します。
^(?!.*([agoid]).*\1)(?!(.*m){3})[magoid]*$
(いずれも1回以上含まず、2回以上agoid
含まないm
)