JAVA正则表达式怎么表达汉字_Java的正则表达式匹配汉字[Java 提供了功能强⼤的正则表达式API,在 包下。本教程介绍如何使⽤正则表达式API。]
刚才有同事问,顺便发出来记⼀下。
以前读《精通正则表达式》的时候已经知道Java的正则表达式⽀持\p{In
name}的形式来指定匹配属于name的Unicode区块的字符。JDK的
Pattern类的⽂档上也有相关例⼦,\p{InGreek},表⽰匹配⼀个属于名为“Greek”的Unicode区块的字符。
那汉字怎么办?
Unicode⾥中⽂、⽇⽂与韩⽂的汉字是放在同⼀个(⼀些)区块⾥的,主要是在“CJK Unified Ideographs”当中,[最近需要在部署实时爬⾍检测系统时,需要动态显⽰页⾯内容,但也为了简单,于是想了个很奇怪的办法。想把⼀个长篇⼩说,《地缘政治⼤战略》中的所有内容赋值给字符串,但还有⼀些在“CJK Unified Ideographs Extension A”与“CJK Unified Ideographs Extension B”当中。
以前我没⽤这个⽅式匹配过汉字,还在想这名字⾥⾯有空格怎么办,试了⼀下\p{InCJK Unified Ideographs}发觉果然可以……当然,这种办法是不区分匹配到的汉字到底是中⽂、⽇⽂还是韩⽂的。也不区分简繁体。同事还问怎么⽤正则表达式只匹配简体中⽂,这个我就没想出什么好办法。
《精通正则表达式》⾥也提到.NET⽤的Unicode区块语法是\p{name}或者\p{Is
name},相关⽂档在
这⾥。
放⼀demo代码:
public class TestUnicodeBlock {
public static void main(String[] args) {
final String regex = "\\p{InCJK Unified Ideographs}";
final String[] testChars = {
"\u6211", // a Chinese character
"\u300A", // a full-width punctuation
"\u3042", // a Hiragana character
"\uD55C" // a Hangul character
};
for (String s : testChars) {
System.out.printf("matched %s: %b\n", s, s.matches(regex));
unicode汉字}
}
}[统计指定内容的汉字个数:String str = 北京欢迎你 hello welcome!;int count=0;Pattern pattern = Patternpile([\u4e00-
\u9fa5]);char c[] = CharArray();for(
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论