2016-10-01 4 views
1

Ich versuche, die Anzahl der Silben in einem bestimmten Wort mit Regex zu zählen. Ich habe auf einige andere Beiträge im Zusammenhang mit dem Stack-Überlauf hingewiesen, bekomme aber seltsames Verhalten, wenn ich mein Programm ausführe.Regex Pattern-Matching-Verhalten für grundlegende Implementierung

Hier ist, was ich bin versucht,

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

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

System.out.println(n); 

Jetzt ist es 1. Ausdrucken Aber es ist sowohl ein „a“ und „y“ innerhalb der Zeichenfolge. Wo bin ich falsch gelaufen?

Antwort

2

Am Ende des String gibt es nicht mehr Buchstaben den Ausdruck so entfernen anzupassen [^$e]

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

Obwohl von Ihrer comment Sie scheinen zu wollen e als Sonderfall zu behandeln. Du könntest

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

Der Zweck des [^ $ e] war, irgendwelche Vorkommen von "e" am Ende des Zeichens zu ignorieren. – ClownInTheMoon

+0

@ClownInTheMoon Wenn Sie das möchten, sollten Sie '[^ e] $' anstelle von '[^ $ e]' verwenden. Außerdem erzeugt '[aeiouy] +' Gruppen von einem oder mehreren Vokalen wegen des '+' am Ende. Ich bin mir nicht sicher, ob Sie das suchen. – Titus

+0

Intersting. Wenn ich '[^ e] $' verwende, dann kommt der Wert von 'n' als Null heraus. Ja, ich suche nach Gruppen von einem oder mehreren Vokalen und versuche dann, keine stillen e zu zählen. – ClownInTheMoon

Verwandte Themen