杰瑞科技汇

Java正则如何精准匹配中文?

Java 正则表达式匹配中文

在 Java 中,可以使用正则表达式来匹配中文字符,以下是几种常见的方法:

Java正则如何精准匹配中文?-图1
(图片来源网络,侵删)

基本方法

使用 Unicode 范围

中文字符的 Unicode 范围主要包括:

  • 基本汉字:\u4e00-\u9fff
  • 扩展A区:\u3400-\u4dbf
  • 扩展B-F区:\u20000-\u2a6df, \u2a700-\u2b73f, \u2b740-\u2b81f, \u2b820-\u2ceaf, \uf900-\ufaff
String regex = "[\u4e00-\u9fa5]"; // 匹配单个中文字符
String regex = "^[\u4e00-\u9fa5]+$"; // 匹配全中文字符串

使用预编译的字符类

String regex = "[\\u4e00-\\u9fa5]";

完整示例

import java.util.regex.*;
public class ChineseRegex {
    public static void main(String[] args) {
        // 测试字符串
        String test1 = "你好世界";
        String test2 = "Hello 世界";
        String test3 = "123 中文";
        String test4 = "汉字";
        // 匹配单个中文字符
        Pattern pattern1 = Pattern.compile("[\u4e00-\u9fa5]");
        System.out.println("单个中文字符匹配:");
        System.out.println(test1 + ": " + pattern1.matcher(test1).find()); // true
        System.out.println(test2 + ": " + pattern1.matcher(test2).find()); // true
        System.out.println(test3 + ": " + pattern1.matcher(test3).find()); // true
        System.out.println(test4 + ": " + pattern1.matcher(test4).find()); // true
        // 匹配全中文字符串
        Pattern pattern2 = Pattern.compile("^[\u4e00-\u9fa5]+$");
        System.out.println("\n全中文字符串匹配:");
        System.out.println(test1 + ": " + pattern2.matcher(test1).matches()); // true
        System.out.println(test2 + ": " + pattern2.matcher(test2).matches()); // false
        System.out.println(test3 + ": " + pattern2.matcher(test3).matches()); // false
        System.out.println(test4 + ": " + pattern2.matcher(test4).matches()); // true
        // 匹配包含中文的字符串
        Pattern pattern3 = Pattern.compile(".*[\u4e00-\u9fa5].*");
        System.out.println("\n包含中文的字符串匹配:");
        System.out.println(test1 + ": " + pattern3.matcher(test1).matches()); // true
        System.out.println(test2 + ": " + pattern3.matcher(test2).matches()); // true
        System.out.println(test3 + ": " + pattern3.matcher(test3).matches()); // true
        System.out.println(test4 + ": " + pattern3.matcher(test4).matches()); // true
    }
}

更全面的中文匹配

如果需要匹配更全面的中文字符(包括扩展区),可以使用以下正则表达式:

String regex = "[\u4e00-\u9fa5\u3400-\u4dbf\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u2f800-\u2fa1f]";

注意事项

  1. Java 正则表达式中的反斜杠需要双重转义,如 \\u4e00
  2. Unicode 范围可能会随着 Unicode 标准的更新而变化
  3. 对于性能敏感的场景,建议预编译正则表达式(使用 Pattern.compile()
  4. 考虑使用 Pattern.CASE_INSENSITIVE 标志如果需要不区分大小写的匹配(虽然中文通常不涉及大小写)

方法可以帮助你在 Java 中有效地匹配中文字符。

Java正则如何精准匹配中文?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇