2016-10-01 35 views
1

我正在嘗試使用正則表達式計算給定單詞中的音節數。我提到了堆棧溢出的其他一些帖子,但當我運行我的程序時會出現奇怪的行爲。基本實現的正則表達式模式匹配行爲

這裏是我試圖

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」的字符串中。我哪裏錯了?

回答

2

在字符串的到底有沒有更多的字母相匹配,從而去除表達[^$e]

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

雖然從comment你似乎要正確對待e作爲一種特殊情況。你可以做

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

[^ $ e]的目的是忽略任何在字符串末尾出現的「e」。 – ClownInTheMoon

+0

@ClownInTheMoon如果這是你想要做的,你應該使用'[^ ​​e] $'而不是'[^ $ e]'。此外,'[aeiouy] +'由於末尾的「+」而創建了一個或多個元音組。我不確定這是你想要的。 – Titus

+0

Intersting。當我使用'[^ e] $'時,'n'的值爲零。是的,我正在尋找一個或多個元音組,然後嘗試不計數無聲的e。 – ClownInTheMoon