Java正则表达式支持Unicode?

com*_*tta 69 java regex unicode cjk

要匹配A到Z,我们将使用正则表达式:

[A-ZA-Z]

如何让正则表达式匹配用户输入的utf8字符?例如中文单词,如环保部

ste*_*ema 106

您正在寻找的是Unicode属性.

例如\p{L},任何语言的任何一种信件

所以匹配这样一个中文单词的正则表达可能是这样的

\p{L}+
Run Code Online (Sandbox Code Playgroud)

有许多这样的属性,有关更多详细信息,请参阅regular-expressions.info

另一种选择是使用修饰符

Pattern.UNICODE_CHARACTER_CLASS

在Java 7中,有一个新属性Pattern.UNICODE_CHARACTER_CLASS可以启用Unicode版本的预定义字符类,可以在此处查看我的答案以获取更多详细信息和链接

你可以这样做

Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS);
Run Code Online (Sandbox Code Playgroud)

\w匹配任何语言的所有字母和所有数字(当然还有一些组合字符的单词_).


Ven*_*Rao 9

要解决NLS支持并避免接受英文特殊字符,我们可以使用以下模式...

[a-zA-Z0-9\u0080-\u9fff]*+

对于UTF代码点参考:http://www.utf8-chartable.de/unicode-utf8-table.pl

代码段:

    String vowels = "????????????????";
    String consonants = "???????????????????????????????????";
    String signsAndPunctuations = "??????????????????????????????????????";
    String symbolsAndNumerals = "??????????";
    String engChinesStr = "ABC???";


    Pattern ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU = Pattern
            .compile("[a-zA-Z0-9 \\u0c00-\\u0c7f]*+");
    System.out.println(ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU.matcher(vowels)
            .matches());


    Pattern ALPHANUMERIC_AND_SPACE_PATTERN_CHINESE = Pattern
            .compile("[a-zA-Z0-9 \\u4e00-\\u9fff]*+");

    Pattern ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN = Pattern
            .compile("[a-zA-Z0-9 \\u0080-\\u9fff]*+");

    System.out.println(ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN.matcher(engChinesStr)
            .matches());
Run Code Online (Sandbox Code Playgroud)


Kil*_*oth 8

要匹配单个字符,您只需将它们包含在字符类中,可以是文字也可以是\u03FB语法.

显然,你经常无法列出表意语言中允许的所有字符.为了使正则表达式根据其类型或代码块处理unicode字符,支持此处定义的各种其他转义.请查看"Unicode支持"部分,特别是对Character类和Unicode标准本身的引用.