5

文字のプールがあり、正規表現を使用して、それらの文字またはそれらの文字のサブセットのアナグラムであるすべての単語を一致させたいと考えています。

例: 文字列 "ACNE" が与えられた場合、正規表現は次の結果を与えるはずです:

  • にきび [T]
  • セナ [T]
  • できます [T]
  • カーン[F]
  • カネン [F]

私はこの解決策を試しまし/b[acne]{1,4}/bたが、単一文字の複数回の繰り返しを受け入れます。各文字を最大 1 回取得するにはどうすればよいですか?

4

2 に答える 2

9

「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)

于 2013-01-28T12:59:05.443 に答える