2016-04-27 20 views
0

以下の正規表現の結果が異なるのはなぜですか?Perl5Util(Apache ORO)とJava正規表現のRegex shorthand " w"の相違

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

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

どうPerl5Utilは、指定された文字の一致を見つけることが、Javaの正規表現エンジンではありませんでしょうか?

+0

_Guess_ 'Perl5Util'はUnicodeをサポートしている可能性があります。 – Tushar

+0

すばやくお返事ありがとうございます。私はそれについて考えましたが、Perl5Utilが入力データ "©"の一致を見つけられなかったときに混乱しました。それはPerl5Utilから期待されていますか? – param83

+0

©は単語文字ではありません。なぜそれが '\ w'とマッチすると思いますか? –

答えて

0

\wは、速記文字クラスを一致単語文字であり、それbelongs to the \p{So} (Symbol, Other) category以来©と一致することはできません。

あなたのテストでは、デフォルトでPerl5UtilがUnicodeに対応していることが確認されています。

Javaでは、パターンを(?U)インライン修飾子を付けて、またはPattern.UNICODE_CHARACTER_CLASS modifier flagを使用してコンパイルすることで、すべてのUnicode文字と数字を一致させることができます。

+0

また、[このメーリングリスト](http://mail-archives.apache.org/mod_mbox/jakarta-oro-dev/200101.mbox/%[email protected]%3E)をチェックしてください* OpCode、Perl5compiler、Perl5Debug、およびPerl5Matcherへの岡本隆のUnicodeおよびPOSIX文字 クラスパッチの修正版が適用されました。 o TODOからUnicodeを削除し、Unicodeクラスを改善/最適化しました。* –