2016-04-27 5 views
0

Warum bekomme ich unterschiedliche Ergebnisse für unter Regex-Ausdruck?Regex Kurzschrift " w" Unterschied in Perl5Util (Apache ORO) vs Java-Regex

String regexp = "^[\\w]+$"; 
String input = "Ã"; 

System.out.println(Pattern.matches(regex, input)); // false 
System.out.println(new Perl5Util().match("/" + regex + "/", input)); //true 

Wie findet Perl5Util die Übereinstimmungen des gegebenen Zeichens, aber die Regex-Engine von Java ist nicht?

+0

_Guess_ 'Perl5Util' könnte Unicode-Unterstützung haben – Tushar

+0

Danke für eine schnelle Antwort. Ich dachte darüber nach, aber ich war verwirrt, als Perl5Util keine Übereinstimmung für die Eingabedaten "©" fand. Wird das von Perl5Util erwartet? – param83

+0

© ist kein Wortzeichen. Warum erwartest du, dass es mit '\ w' übereinstimmt? –

Antwort

0

Die \w ist ein Wort Charakter Stenografie Zeichenklasse übereinstimmt, und kann © nicht belongs to the \p{So} (Symbol, Other) category da sie übereinstimmen.

Ihr Test bestätigt, dass Perl5Util Unicode standardmäßig unterstützt.

In Java können Sie die Übereinstimmung aller Unicode-Buchstaben und -Ziffern aktivieren, indem Sie das Muster mit dem Inline-Modifikator (?U) voranstellen oder das Muster mit Pattern.UNICODE_CHARACTER_CLASS modifier flag kompilieren.

+0

Überprüfen Sie auch [diese Mailing-Liste] (http://mail-archives.apache.org/mod_mbox/jakarta-oro-dev/200101.mbox/%[email protected]%3E), heißt es * Eine modifizierte Version von Takashi Okamotos Unicode- und POSIX-Zeichen Klassenpatch wurde auf OpCode, Perl5compiler, Perl5Debug und Perl5Matcher angewendet. o Unicode aus dem TODO entfernt und Unicode-Klassen verbessern/optimieren. * –