2009-05-27 2 views
2

は、我々は単に本当に英語以外の文字をサポートするために、固定されるべきであるJava正規表現で非ASCII値をサポートしていますか?

String clean(String input) 
{ 
    return input==null?"":input.replaceAll("[^a-zA-Z ]",""); 
} 

ある英字または空白でない文字をクリアする現在の方法を持っている(例えば、S、U、...)。残念ながら、Java正規表現のクラス(例: "\ W" - 単語以外の文字、 "\ p {Alpha}" -US-ASCIIのみ})はこれをサポートしていないようです。それをテストするために各文字を手動でループするのではなく、Java正規表現でこれを行う方法はありますか?

答えて

2

Java 6パターンはUnicodeを処理します。this docを参照してください。 Java言語仕様の§3.3に記載されているようなJavaソースコードにおける \ u2014として

Unicodeエスケープシーケンスは 処理されます。このような エスケープシーケンスは、正規表現 パーサーによって直接 に実装されているため、 ファイルまたはキーボードから読み取られる式でユニコードエスケープを にすることができます。したがって、 文字列 "\ u2014"と "\\ u2014"は、 と等しくないが、同じ パターンにコンパイルされます。このパターンは、 の16進値0x2014に一致します。

ユニコードブロックとカテゴリは、Perlのように\ pと\ Pで構成された で書かれた です。入力が のプロパティにpropがある場合は\ p {prop}が一致しますが、入力 にそのプロパティがある場合は \ P {prop}が一致しません。ブロックは、 の接頭辞が、 InMongolianのように指定されています。カテゴリは で、オプションの接頭辞で指定することができます。 \ p {L}と\ p {IsL}の両方がUnicode文字の カテゴリを表します。ブロック とカテゴリは、 と文字クラス外の両方で使用できます。

関連する問題