n个单词中x元音的正则表达式

时间:2012-11-17 17:02:07

标签: java regex

我正在尝试用Java编写一个正则表达式,它将匹配一个长度至少为x个元音的n字长。

到目前为止,我已经提出以下建议:

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

这似乎有用,但也匹配长度大于10的单词,即:

wildernesses - 匹配

volatilizations - 匹配

声纹 - 匹配(这应该是唯一的匹配)

我希望强制执行length = 10约束。我怀疑它可能与我将字母(元音)添加到字符串长度这一事实有关,但我不确定。任何帮助/指导将不胜感激。

3 个答案:

答案 0 :(得分:4)

使用字词边界\b来阻止匹配在单词中途发生:

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

这将匹配:

  

wildernesses 声纹挥发

答案 1 :(得分:2)

使用简单的超前(作为java String)可以大大简化:

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

请注意,所有其他答案都使用\w作为字母,但\w包含下划线字符,不是字母。

(?i)打开不区分大小写。

答案 2 :(得分:0)

试试这个...... (?&LT = \ C | \ p {PUNCT})(?: AEIOU {2,})(:(我?)|(?:A-Z&安培;&安培; [^ AEIOU] {3,})) (小于?= \ W {10})

针对似乎有效的样本数据对此进行了测试。在我的例子中,我说的是标点符号。