-1

正規表現を使用して調べようとしている巨大な辞書があります。私がやりたいことは、特定の順序で提供する各文字が少なくとも 1 回出現する辞書内のすべての単語を見つけることです。

現在、指定された文字のみを含む単語を見つけることができますが、私が言ったように、それはまさに私が望むものではありません.

例:

次の文字 {b、a、d} のそれぞれを少なくとも 1 回は使用したい

astring.matches(正規表現)

私は次のような言葉を期待します:

最悪の、最悪の、困惑した

それらにはすべて、各文字が少なくとも 1 回は含まれていますが、特定の順序ではなく、文字列内に他の文字が存在することに注意してください。

誰でもこれを行う方法を知っていますか? その他の提案も大歓迎です!

4

2 に答える 2

2

一連の先読みが必要です。

^(?=.*b)(?=.*a)(?=.*d).*

これは構築するのが面倒です。ただし、正規表現を使用して構築することで、痛みを和らげることができます。

String regex = "^" + "bad".replaceAll(".", "(?=.*$0)") + ".*";

を繰り返しString.matches()使用する場合は、次のコードを使用することをお勧めします。これは、 を呼び出すたびString.matches()に正規表現が再度コンパイルされるためです (キャッシュはありません)。

// do this once
Pattern pattern = Pattern.compile(regex); 

// reuse the pattern many times
if (pattern.matcher(input).matches())
于 2013-05-01T02:19:34.933 に答える
2

利用可能な場合は、先読みを使用してこれを行うことができます

(?=.*b)(?=.*a)(?=.*d)

しかし、これは非常に非効率的です。String.indexOf複数のチェックを使用できない理由はありますか?

于 2013-05-01T01:51:25.877 に答える