我正在尝试用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约束。我怀疑它可能与我将字母(元音)添加到字符串长度这一事实有关,但我不确定。任何帮助/指导将不胜感激。
答案 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})
针对似乎有效的样本数据对此进行了测试。在我的例子中,我说的是标点符号。