我正在尝试为我的 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;
}