Java regex是否支持Unicode?


Answers:


119

您正在寻找的是Unicode属性。

例如\p{L}来自任何语言的任何形式的信件

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

\p{L}+

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

另一种选择是使用修饰符

Pattern.UNICODE_CHARACTER_CLASS

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

你可以做这样的事情

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

并且\w将匹配所有字母和所有数字从任何语言(当然还有一些字的组合字符喜欢_)。


如果我们不希望字符串pls中的数字怎么办?
汤姆·帕勒

9

要匹配单个字符,您可以简单地将它们包括在字符类中,既可以作为文字,也可以通过\u03FB语法。

显然,您经常无法以表意语言列出所有允许的字符。为了使regex根据类型或代码块来处理unicode字符,还支持在此处定义的各种其他转义符。查看“ Unicode支持”部分,尤其是对Character类和Unicode标准本身的引用。


如何匹配用户示例环保部输入的多个utf8字符,因为用户将随机输入一些字符
cometta 2012年

1
这就像匹配多个拉丁字符:[a-z]+或者[a-z]{3}甚至[a-z]{2,10}。唯一不同的是您在量词所应用的字符类中所允许的内容。
Kilian Foth 2012年

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());

3
  • Java正则表达式API适用于该char类型
  • char类型隐式为UTF-16
  • 如果您具有UTF-8数据,则需要在输入时将其转码为UTF-16

Unicode是通用的字符集,而UTF-8可以描述所有字符(包括控制字符,标点符号,符号,字母等)。您将需要更加具体地确定要包含的内容和要排除的内容。Java正则表达式使用该\p{category}语法按类别匹配代码点。请参阅Unicode标准列表类别。

如果要在表意文字序列中识别和分隔单词,则需要查看更复杂的API。我将从BreakIterator类型开始。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.