为了匹配 A 到 Z,我们将使用正则表达式:
[A-Za-z]
如何允许正则表达式匹配用户输入的 utf8 字符?例如像环保部这样的中文单词
您要查找的是 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
将匹配任何语言的所有字母和所有数字(当然还有一些组合字符的单词,如_
)。
为了解决 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());
若要匹配单个字符,只需将它们作为文字或通过u03FB
语法包含在字符类中即可。
显然,您通常无法列出表意语言中所有允许的字符。为了使正则表达式根据 unicode 字符的类型或代码块处理它们,支持此处定义的各种其他转义。查看"Unicode 支持"部分,特别是对 Character
类和 Unicode 标准本身的引用。
- Java 正则表达式 API 适用于
char
类型 char
类型隐式为 UTF-16- 如果您有 UTF-8 数据,则需要在输入时将其转码为 UTF-16(如果尚未这样做)
Unicode 是通用字符集,UTF-8 可以描述所有字符(包括控制字符、标点符号、符号、字母等)。您必须更具体地说明要包含的内容和要排除的内容。Java 正则表达式使用 p{category}
语法按类别匹配代码点。有关类别列表,请参阅 Unicode 标准。
如果要识别和分隔表意文字序列中的单词,则需要查看更复杂的API。我会从BreakIterator
类型开始。
从 Java 9 开始,您还可以使用 X
来匹配任何 Unicode 扩展字素簇。更多信息请参阅Java Doc:Pattern。