2012-04-17 11 views
5

私は、次の正規表現があります。それはそれで任意のUTF-8特殊記号を許可しない、を除いて、正規表現の特殊記号

String regExpression = "^[a-zA-Z0-9+,. '-]{1,"+maxCharacters+"}$"; 

私のために正常に動作します(A A A AÎîのSのS T T) 。

私の現在の正規表現では、それが既に行っている以外に、発音区別符を受け入れる必要があります。

何か助けていただければ幸いです。ありがとう。

答えて

6

これらをキャッチするには、POSIX character classesを調べる必要があります。残念ながら、Java Regexは言語固有のPOSIXクラスをサポートしていませんが、おそらく\p{Graph} A visible character: [\p{Alnum}\p{Punct}]または\p{Print} A printable character: [\p{Graph}\x20]が適合します。

ソリンが提案するベストフィットはおそらく\p{L}(レター)です。

import java.util.regex.Pattern; 

public class Regexer { 

    public static void main(String[] args) { 
     int maxCharacters = 100; 
     String data = "Ă ă Â â Î î Ș ș Ț ț"; 
     String pattern = "^[\\p{L}0-9+,. '-]{1," + maxCharacters + "}$"; 

     Pattern p = Pattern.compile(pattern); 

     if (p.matcher(data).matches()) { 
      System.out.println("Hit"); 
     } else { 
      System.out.println("No"); 
     } 

    } 
} 

これは私に役立ちます。

+6

さらに、[\ p {L}]は文字を意味します。 – Sorin

+0

あなたは正しいです、私はこれを追加します。 –

+0

ええと。\ p {L}で試してみましたが、それでも動作しませんでした。これまでに働いたのは「^ [\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ - これについての考え? – Fofole

関連する問題