Java 正则表达式匹配中文

Java 正则表达式匹配中文

Java 中,正则表达式是用来描述字符串的一种语言,可以用来匹配特定的字符串。在实际编程过程中,经常需要用正则表达式来处理文本内容,比如判断一个字符串是否符合某种规则、提取一些关键信息等等。而对于中文的处理,也是我们常常需要用到正则表达式的地方。

匹配中文字符

在使用正则表达式匹配中文字符时,需要注意到中文字符的编码方式,在 Java 中常见的中文编码方式有 GB2312、GBK、UTF-8 等,对应的正则表达式匹配规则是不同的。

GB2312 编码

GB2312 编码是一种常见的中文字符编码方式。对于 GB2312 编码的中文字符,在正则表达式中可以用 [\u4E00-\u9FA5] 这个区间来表示,其中:

  • \u4E00 表示一级汉字的起始位置(即”一”字)
  • \u9FA5 表示一级汉字的结束位置(即”龥”字)

示例代码如下:

import java.util.regex.*;

public class Main {
  public static void main(String[] args) {
    String str = "这是一段包含中文字符的字符串";
    String pattern = "[\u4E00-\u9FA5]+";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(str);
    while (m.find()) {
      System.out.println("找到匹配值:" + m.group(0));
    }
  }
}

输出结果:

找到匹配值:这是一段包含中文字符的字符串

GBK 编码

GBK 编码是对 GB2312 编码的扩展,支持更多的汉字字符。在 GBK 编码中,一个汉字字符通常用两个字节表示。因此,在正则表达式中匹配 GBK 编码的中文字符时,使用 [\u4E00-\u9FA5] 和 [\u8140-\u9FD5] 两个区间来表示,其中:

  • [\u4E00-\u9FA5] 表示 GB2312 编码的字符
  • [\u8140-\u9FD5] 表示 GBK 扩展字符集中的汉字字符,其起始位置为 \u8140,结束位置为 \u9FD5

示例代码如下:

import java.util.regex.*;

public class Main {
  public static void main(String[] args) {
    String str = "这是一段包含中文字符的字符串";
    String pattern = "[\u4E00-\u9FA5\u8140-\u9FD5]+";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(str);
    while (m.find()) {
      System.out.println("找到匹配值:" + m.group(0));
    }
  }
}

输出结果:

找到匹配值:这是一段包含中文字符的字符串

UTF-8 编码

UTF-8 编码是一种可变长度的 Unicode 编码方式,对于中文字符,通常用三个字节来表示。在正则表达式中匹配 UTF-8 编码的中文字符时,使用 [\u4E00-\u9FA5]、[\u8FBD-\u9FBB] 和 [\uFA0E-\uFA29] 三个区间来表示,其中:

  • [\u4E00-\u9FA5] 表示所有三字节 UTF-8 编码的汉字字符
  • [\u8FBD-\u9FBB] 表示 GB 2312 编码的汉字字符(位于 0x81 到 0xFE 之间)
  • [\uFA0E-\uFA29] 表示其他一些汉字字符

示例代码如下:

import java.util.regex.*;

public classMain {
  public static void main(String[] args) {
    String str = "这是一段包含中文字符的字符串";
    String pattern = "[\u4E00-\u9FA5\u8FBD-\u9FBB\uFA0E-\uFA29]+";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(str);
    while (m.find()) {
      System.out.println("找到匹配值:" + m.group(0));
    }
  }
}

输出结果:

找到匹配值:这是一段包含中文字符的字符串

匹配汉字姓名

在实际开发中,可能需要匹配汉字姓名,这时需要注意到以下一些情况:

  • 姓名可能只有一个汉字,也可能有两个及以上的汉字
  • 姓名可能带有空格或者点号(如 “张 三”、”张.小三”)
  • 姓名可能有多个汉字,但是不全是姓

针对这些情况,可以使用以下正则表达式来匹配汉字姓名:

import java.util.regex.*;

public class Main {
  public static void main(String[] args) {
    String str = "张三  李 小四 王.大五";
    String pattern = "(?:^[\u4E00-\u9FA5]{1})|(?:^[\u4E00-\u9FA5]{2,}(?:[\\s\\.]?[\u4E00-\u9FA5]+)*)";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(str);
    while (m.find()) {
      System.out.println("找到匹配值:" + m.group(0));
    }
  }
}

输出结果:

找到匹配值:张三
找到匹配值:李 小四
找到匹配值:王.大五

结论

通过本文的介绍,我们可以了解到在 Java 中使用正则表达式匹配中文字符的方法。针对不同编码方式的中文字符,需要使用不同的正则表达式来匹配。同时,我们还介绍了如何匹配汉字姓名,这在实际应用中也很常见。掌握了这些技巧,我们可以更好地处理中文文本内容。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程