我尝试使用正则表达式计算给定单词中的音节数。我在堆栈溢出时提到了其他一些帖子,但是当我运行程序时,我的行为很奇怪。
以下是我正在尝试的内容
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"在字符串中。我哪里出错?
答案 0 :(得分:2)
在String的末尾,没有更多要匹配的字母,因此请删除表达式[^$e]
Pattern p = Pattern.compile("[aeiouy]+");
虽然您comment希望将e
视为一种特殊情况。你可以做到
Pattern p = Pattern.compile("[aiouy]|(?!^)e(?<!$)");