2016-10-01 8 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

一致するように、これ以上の文字があなたのcommentからあなたは特別なケースとしてeを扱いたいように見えるが、そう[^$e]

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

式を削除するはありません。あなたはできます

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

[^ $ e]の目的は、文字列の最後に "e"が出現するのを無視することでした。 – ClownInTheMoon

+0

@ClownInTheMoonそうしたいのなら、あなたは '[^^e]'の代わりに '[^ e] $'を使うべきです。また、 '[aeiouy] +'は、最後に '+'があるため、1つ以上の母音のグループを作成します。それがあなたが探しているものかどうかは分かりません。 – Titus

+0

インタースティング。 '[^ e] $'を使うと、 'n'の値はゼロになります。はい、私は1つ以上の母音のグループを探していて、静かな電子を数えないようにしようとしています。 – ClownInTheMoon

関連する問題