Java的正则表达式匹配汉字

本文介绍如何使用Java正则表达式中的\p{InCJKUnifiedIdeographs}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚才有同事问,顺便发出来记一下。

以前读《精通正则表达式》的时候已经知道Java的正则表达式支持\p{In[i]name[/i]}的形式来指定匹配属于name的Unicode区块的字符。JDK的[url=http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html]Pattern类的文档[/url]上也有相关例子,\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[i]name[/i]},相关文档在[url=http://msdn.microsoft.com/en-us/library/az24scfc.aspx]这里[/url]。

放一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));
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值