Java regex for support Unicode?

2022-08-31 11:36:37

为了将 A 与 Z 匹配,我们将使用正则表达式:

[A-Za-z]

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


答案 1

您要查找的是 Unicode 属性。

例如: 是来自任何语言的任何类型的字母\p{L}

因此,匹配这样一个中文单词的正则表达式可能是这样的

\p{L}+

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

另一种选择是使用修饰符

Pattern.UNICODE_CHARACTER_CLASS

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

你可以做这样的事情

Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS);

并且将匹配来自任何语言的所有字母和所有数字(当然还有一些组合字符的单词,例如)。\w_


答案 2

为了解决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());