音节的正则表达式不起作用

时间:2012-09-01 23:27:00

标签: java regex

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

1 个答案:

答案 0 :(得分:1)

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

(?!...)