2

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

1 回答 1

1

您忘记了前瞻周围的括号:

(?!...)
于 2012-09-01T23:32:41.993 回答