86

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

[A-Z-Z]

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

4

4 回答 4

130

您正在寻找的是 Unicode 属性。

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

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

\p{L}+

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

另一种选择是使用修饰符

Pattern.UNICODE_CHARACTER_CLASS

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

你可以做这样的事情

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

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

于 2012-06-05T09:21:08.527 回答
14

为了解决 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());
于 2015-07-07T10:04:13.123 回答
9

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

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

于 2012-06-05T08:50:24.760 回答
4
  • Java 正则表达式 API 适用于char类型
  • 类型是char隐式 UTF-16
  • 如果您有 UTF-8 数据,如果尚未完成,则需要在输入时将其转码为 UTF-16

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

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

于 2012-06-05T09:19:58.903 回答