3

少なくともx個の母音を含むn個の長さの単語に一致する正規表現をJavaで作成しようとしています。

これまでのところ、私は次のことを思いついた:

// match words that are length 10 and have at least 2 vowels in them
(?=\w{10})(?:[^aeiou\W]*[aeiuo]){2}\w+

これは機能しているようですが、長さが10より大きい単語にも一致します。

荒野-一致

揮発-一致

声紋-一致(これが唯一の一致である必要があります)

長さ=10の制約が適用されるようにしたいと思います。文字列の長さに文字(母音)を追加していることと関係があるのではないかと思いますが、定かではありません。任意のヘルプ/ガイダンスをいただければ幸いです。

4

3 に答える 3

3

単語の境界を使用\bして、単語の途中で一致が発生しないようにします。

\b(?=\w{10}\b)(?:[^aeiou\W]*[aeiuo]){2,}[^aeiou\W]*\b

これは一致します:

荒野の声紋の揮発

于 2012-11-17T17:05:59.067 に答える
2

単純な先読み(Java文字列として)を使用すると、大幅に簡略化できます。

"(?i)\\b(?=([^aeiou ]*[aeiou]){2,})[a-z]{10}\\b"

他のすべての回答は文字に使用されますが、文字ではない\wアンダースコア文字が\w含まれていることに注意してください。

(?i)大文字と小文字を区別しないようにします。

于 2012-11-17T17:25:20.343 に答える
0

これを試してみてください...(?<= \ b | \ p {Punct})(?:(?i)(?: aeiou {2、})|(?: az && [^ aeiou] {3、})) (?<= \ w {10})

動作するように見えるサンプルデータに対してこれをテストしました。私の例では、句読点を考慮しました。

于 2015-03-02T19:25:42.997 に答える