Java 正则表达式匹配中文

您所在的位置:网站首页 java的判断表达式 Java 正则表达式匹配中文

Java 正则表达式匹配中文

2024-03-29 02:21| 来源: 网络整理| 查看: 265

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3