正则表达式匹配中文之前一直都用的
在正则表达式中指定Unicode编码区间来实现,没有仔细看过Java doc中关于正则表达式的详细描述, 无意间逛到了一个网站Unicode Regular Expressions,里面讲了Unicode script(书写格式)这个东西,再结合查阅的资料,总结下他的用法。
在Java正则表达式中使用Unicode script
在正则表达式中指定书写格式时使用的是
\p,完整的\p{script=Han}含义是匹配字符串中书写格式为汉字的Unicode字符。Jdk中也定义了Unicode script的枚举类java.lang.Character.UnicodeScript。
代码示例
/**
* 测试Java7对正则表达式的增强功能.
* 1. 通过Unicode script匹配所有汉字
* 2. 命名捕获组
*/
@Test
public void testUseUnicodeScriptCaptureChineseCharacter(){
String target = "235开头的汉字jkl345中间夹的汉字346dsflj";
/*
\p{script=han}: 通过指定Unicode字符使用的书写格式获取字符串中所有的汉字
?<name>: 命名捕获组, 在捕获组数量较多的情况下可以用有意义的名称来替代纯数字序号
*/
String regex = "(?<chineseCharacter>\\p{script=han}+)";
// String regex = "(?<chineseCharacter>\\p{script=" + Character.UnicodeScript.HAN + "}+)";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(target);
while (matcher.find()) {
final String groupByIndex = matcher.group(1);
final String groupByName = matcher.group("chineseCharacter");
System.out.println(groupByIndex);
System.out.println(groupByName);
System.out.println("========");
}
}
运行结果如下:
通过该技巧完成替换
^([\w|\p{script=Han}]+)\s+([\w|\p{script=Han}]+)\s+(?:\s*[\w|\p{script=Han}]*\s*[\w|\p{script=Han}]*\s*)$
核心:
[\w|\p{script=Han}]+,匹配字母、数字、中文