我正在尝试为我的java程序编写一个简单的正则表达式来计算音节,但我对正则表达式来说真的很新,所以我没有正确地写它,而且我不确定我做错了什么。我写的正则表达式是:
((a|i|o|u|y)?!(a|i|o|u|y|e)|e?!(a|i|o|u|y|e|\\w)|\\w)
(a|i|o|u|y)?!(a|i|o|u|y|e)
应该匹配所有未被另一个元音立即跟随的非e元音。
e?!(a|i|o|u|y|e|\\w)
应该匹配所有未被元音或非元素字符直接跟随的e。
\\w
应该匹配所有其他两个部分之一不匹配的单词。
相反,我的前两个根本没有匹配,\ w匹配每个字母数字字符,所以显然我做错了多了。
我真的很感激帮助,对不起,如果这个问题有点基本的话!
java方法本身就在这里,但我认为它工作正常:
public int countNumberOfSyllables(String textToCountSyllablesIn) {
int syllableCounter = 0;
Pattern regexForSyllables = Pattern.compile(
"((a|i|o|u|y)?!(a|i|o|u|y|e)|e?!(a|i|o|u|y|e|\\w)|\\w)",
Pattern.CASE_INSENSITIVE);
Matcher syllableMatcher = regexForSyllables.matcher(textToCountSyllablesIn);
while (syllableMatcher.find()) {
syllableCounter++;
}
if (syllableCounter == 0) {
syllableCounter++;
}
return syllableCounter;
}
答案 0 :(得分:1)
你忘记了前瞻周围的括号:
(?!...)