正则在敏感词过滤系统中的设计与优化

胖枫大大_8877

胖枫大大_8877

2026-06-06

419人浏览

原创

正则表达式用于敏感词过滤需预处理、边界控制与缓存:先转义元字符,用中文词边界避免跨词匹配;大规模词库须分片(≤200词/组)编译并缓存;应对绕过应优先文本清洗,高危词才启用有限模糊规则;替换策略需分级且保留上下文。

正则在敏感词过滤系统中的设计与优化

正则表达式在敏感词过滤中不是不能用,而是容易用错——尤其当词库变大、用户开始“花式绕过”时,简单拼接|的写法会迅速失效。真正实用的正则方案,核心在于预处理、边界控制和运行时缓存,而不是堆砌语法糖。

敏感词正则必须做转义和词边界

直接把“武汉|口罩|王*”拼成/武汉|口罩|王*/g是危险的:星号会被当作量词,点号、括号、问号等元字符会破坏匹配逻辑;更严重的是,“武汉”会误中“武汉市”,“口”可能单独命中“口罩”里的字。

  • 每个敏感词需先转义:用word.replace(/[.*+?^${}()|[]\]/g, '\$&')(JS)或preg_quote($word, '/')(PHP)
  • 中文场景推荐用(?模拟词边界,避免跨词匹配
  • 英文/混合内容可加,但注意对中文无效,不能混用

大规模词库要分片编译,避免正则超长崩溃

上千个词硬塞进一个正则,不仅编译慢,某些引擎(如JavaScript的V8)还会触发回溯限制或内存溢出。实测超过500词后,new RegExp(words.join('|'))成功率明显下降。

XiaoHu.AI
XiaoHu.AI

一款AI工具,主要用于由小互建立的一个AI资讯、教程、课程、工具以及开源项目案例的平台,适合需要提升相关任务效率的用户。

下载
  • 按首字或分类分组:比如政治类200词一组、广告类300词一组,分别生成独立正则
  • 每组词数控制在200以内,编译后缓存到Map或WeakMap中,键为分组标识
  • PHP可用array_chunk($keywords, 200)切块,循环调用preg_replace,比单次大正则更稳

应对绕过:正则支持干扰符容错,但要有节制

用户插入空格、全角符号、零宽字符(U+200B)、大小写混用,是常见绕过手段。纯精确匹配已不够用,但模糊正则写太松又易误杀。

  • 文本预处理优先:统一转小写、去除零宽字符、替换全角空格为半角、清理★→*等干扰符
  • 对高危词单独配置模糊规则,例如“敏[\s\u3000\*\u2605]{0,2}感[\s\u3000\*\u2605]{0,2}词”,不全局启用
  • 禁用.*?类贪婪匹配,防止回溯爆炸;必要时用(?:s*)?替代s*

替换策略要兼顾安全与可读性

一律替成***看似省事,但在评论、弹幕等场景下,可能破坏语义、引发误判,甚至被用于构造恶意HTML。

  • 纯文本替换用String.prototype.replace()或preg_replace()即可
  • 含HTML的内容,先用DOMParser提取textContent,过滤后再还原结构,避免<script>内字符串被误杀</script>
  • 支持分级替换:政治类→[已屏蔽](不可逆),普通类→**,长词可保留首尾字如“王***锋”
  • 记录命中位置和原词,供人工复审或训练模型优化漏杀率

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

正则表达式

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

4076

8

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

2023.07.05

2601

4

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7122

9

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

2023.08.11

792

5

正则表达式空格
正则表达式空格

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

500

5

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

653

12

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

2023.11.17

386

3

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.12.06

719

7

php正则表达式有哪些
php正则表达式有哪些

php正则表达式有"/pattern/"、"^"、"$"、"."、"[]"、"[^]"、"[a-z]"、"[A-Z]"、"[0-9]"、"\d"、"\D"、"\w"、"\W"、&a

2024.02.23

312

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 20.9万人学习

JavaScript正则表达式基础与实战
JavaScript正则表达式基础与实战

共11课时 | 1.7万人学习

布尔教育正则表达式视频教程
布尔教育正则表达式视频教程

共14课时 | 5.1万人学习