用于基本实现的正则表达式模式匹配行为

时间:2016-10-01 15:27:56

标签: java regex

我尝试使用正则表达式计算给定单词中的音节数。我在堆栈溢出时提到了其他一些帖子,但是当我运行程序时,我的行为很奇怪。

以下是我正在尝试的内容

int n=0;
Pattern p = Pattern.compile("[aeiouy]+[^$e]");
Matcher m = p.matcher("Harry");

while(m.find()) {
     n++;
}

System.out.println(n);

现在,它打印出来1.但是有一个" a"和" y"在字符串中。我哪里出错?

1 个答案:

答案 0 :(得分:2)

在String的末尾,没有更多要匹配的字母,因此请删除表达式[^$e]

Pattern p = Pattern.compile("[aeiouy]+");

虽然您comment希望将e视为一种特殊情况。你可以做到

Pattern p = Pattern.compile("[aiouy]|(?!^)e(?<!$)");