2012-04-17 121 views
5

我有以下的正则表达式:正则表达式变音符号

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

的正常工作对我来说,只是,它不允许任何UTF-8变音符号(A A A A I I S式T T) 。

我只需要我目前的正则表达式接受其中的变音符号,除了它已经做了。

任何帮助表示赞赏。谢谢。

回答

6

您需要查看POSIX character classes来捕捉这些内容。可悲的是,Java正则表达式不支持语言特定的POSIX类,但也许\p{Graph} A visible character: [\p{Alnum}\p{Punct}]\p{Print} A printable character: [\p{Graph}\x20]将适合。

索林建议的最佳拟合可能是\p{L}(Letter)。

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 2012-04-17 09:59:23

+0

你说得对,我会补充一点。 – 2012-04-17 10:02:52

+0

嗯..我用\ p {L}尝试过,但它仍然无法工作。到目前为止唯一的工作是“^ [\\wĂăÂâŢţ0-9+ ,.' - ] {1,”+ maxCharacters +“} $”但我不知道这是多么的好。对此有何想法? – Fofole 2012-04-17 10:08:45