Java正则expression式支持Unicode吗?
为了匹配A到Z,我们将使用正则expression式:
[A-ZA-Z]
如何让正则expression式匹配用户input的utf8字符? 比如环保部等中文词汇
你正在寻找的是Unicode属性。
例如\p{L}
是来自任何语言的任何types的字母
所以匹配这样一个中文单词的正则expression式可能是这样的
\p{L}+
有很多这样的属性,更多的细节请参阅regular-expressions.info
另一种select是使用修饰符
Pattern.UNICODE_CHARACTER_CLASS
在Java 7中有一个新的属性Pattern.UNICODE_CHARACTER_CLASS
,它使Unicode版本的预定义的字符类在这里看到我的答案一些更多的细节和链接
你可以做这样的事情
Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS);
和\w
将匹配所有字母和任何语言的所有数字(当然还有一些单词组合字符如_
)。
要匹配单个字符,可以简单地将它们包含在字符类中,可以是文字或通过\u03FB
语法。
显然,你经常不能在表意语言中列出所有允许的字符。 为了使正则expression式根据它们的types或代码块来处理unicode字符,在这里定义了各种其他的转义符。 查看“Unicode支持”一节,特别是对Character
类和Unicode标准本身的引用。
为了解决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());
- Java正则expression式API适用于
char
types -
char
types隐式地是UTF-16 - 如果你有UTF-8数据,你将需要在input时将其转码为UTF-16,如果这还没有完成的话
Unicode是通用字符集,UTF-8可以描述所有字符(包括控制字符,标点,符号,字母等)。您需要更具体地说明要包含什么以及要排除什么。 Java正则expression式使用\p{category}
语法按类别匹配代码点。 请参阅Unicode标准以获取类别列表 。
如果你想识别和分开一系列表意文字,你将需要看一个更复杂的API。 我会从BreakIterator
types开始。