在 Java 里用正则提取中文字符,核心就是利用 Unicode 中文范围。下面给你几种常见、实战可用的写法。
\u4e00-\u9fa5
import java.util.regex.*;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
String text = "Hello 你好,Java 正则 123!";
Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5]+");
Matcher matcher = pattern.matcher(text);
List<String> result = new ArrayList<>();
while (matcher.find()) {
result.add(matcher.group());
}
System.out.println(result);
}
}
[你好, 正则]
✅ 说明
[\\u4e00-\\u9fa5]:匹配单个中文字符+:连续中文整体如果你还想包含中文标点(如:,。!?、):
Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5\\u3000-\\u303f\\uff00-\\uffef]+");
Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5]");
public static boolean hasChinese(String str) {
return str.matches(".*[\\u4e00-\\u9fa5].*");
}
String text = "Hello 你好 Java 正则 123";
String result = text.replaceAll("[^\\u4e00-\\u9fa5]", "");
System.out.println(result);
输出:
你好正则
\u 要转义"[\\u4e00-\\u9fa5]" ✅
"[\u4e00-\u9fa5]" ❌(编译期会被解析)
\u9fa5 不包含部分扩展汉字Pattern.compile("[\\p{script=Han}]");
| 场景 | 推荐写法 |
|---|---|
| 一般中文 | [\\u4e00-\\u9fa5]+ |
| 中文 + 标点 | 加上 \u3000-\u303f\uff00-\uffef |
| 是否含中文 | matches(".*[\\u4e00-\\u9fa5].*") |
| 现代 Unicode | \\p{script=Han} |
如果你有具体场景(比如:从 JSON / 文件路径 / 爬虫文本 / 身份证 / 地址中提取中文),可以直接贴出来,我帮你写精准正则。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。