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
は、他の 2 つの部分のいずれかによって部分的に一致しないすべての単語に一致するはずです。
代わりに、最初の 2 つはまったく一致せず、\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;
}