Java正则表达式:完整匹配中文敏感词
在进行文本处理时,我们经常会遇到需要过滤敏感词的情况。而中文敏感词的过滤相对英文更加复杂,因为中文字符涉及到Unicode编码范围的问题。本文将介绍如何使用Java正则表达式,实现对中文敏感词的完整匹配过滤。
正则表达式的基本概念
正则表达式是对字符串操作的一种逻辑公式,它通常用来描述字符串的特征。在Java中,可以使用Pattern和Matcher类来支持正则表达式的功能。下面是一些常用的正则表达式元字符:
.
:匹配任意一个字符*
:匹配零个或多个前面的字符+
:匹配一个或多个前面的字符?
:匹配零个或一个前面的字符|
:匹配两项中的任意一个[]
:匹配方括号中的任意一个字符{n}
:匹配前面字符恰好出现n次{m,n}
:匹配前面字符出现m次到n次
完整匹配中文敏感词的正则表达式
在匹配中文敏感词时,我们需要考虑到中文字符的特殊性。一个中文字符通常占用2个字节,对应到Unicode编码中通常在\u4e00
到\u9fa5
之间。因此,我们可以使用[\u4e00-\u9fa5]
来匹配一个中文字符。
下面是一个匹配中文敏感词的正则表达式示例:
String sensitiveWord = "我是敏感词";
String text = "这是一段包含敏感词的文本,敏感词是我是敏感词";
String regex = "(?:^|[^\\p{L}])" + sensitiveWord + "(?:$|[^\\p{L}])";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
System.out.println("文本中含有敏感词");
} else {
System.out.println("文本中没有敏感词");
}
在上面的示例中,我们首先定义了一个敏感词sensitiveWord
和一个包含敏感词的文本text
。然后构建了一个正则表达式regex
,用于匹配文本中是否包含敏感词。在这个正则表达式中,使用了(?:^|[^\\p{L}])
和(?:$|[^\\p{L}])
来确保匹配的是完整的敏感词,而不是部分匹配。
完整匹配多个中文敏感词的正则表达式
如果我们需要匹配多个中文敏感词,可以将每个敏感词用|
连接起来,形成一个或的关系。下面是一个匹配多个中文敏感词的正则表达式示例:
String[] sensitiveWords = {"敏感词1", "敏感词2", "敏感词3"};
String text = "这是一段包含敏感词的文本,敏感词是敏感词1、敏感词2和敏感词3";
String regex = "(?:^|[^\\p{L}])(" + String.join("|", sensitiveWords) + ")(?:$|[^\\p{L}])";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
System.out.println("文本中含有敏感词");
} else {
System.out.println("文本中没有敏感词");
}
在这个示例中,我们首先定义了一个包含多个敏感词的数组sensitiveWords
,然后使用String.join("|", sensitiveWords)
将敏感词连接起来,形成一个或的关系。最后构建正则表达式regex
来匹配多个中文敏感词。
运行结果
对于上面的两个示例,如果运行时文本中包含敏感词,将会输出文本中含有敏感词
;如果文本中不包含敏感词,将会输出文本中没有敏感词
。
通过使用Java正则表达式,我们可以实现对中文敏感词的完整匹配过滤,确保敏感词不会出现在文本中。