You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式实现:匹配非禁用词紧邻前置的指定列表词汇

正则修正方案

原正则失效原因

原有正则.*(?<!forbidden)\b(word1|word2|word3)\b.*无法正确拦截违规场景的核心问题是:
负向后顾(?<!forbidden)仅检查目标词起始位置直接紧邻的字符序列是否为forbidden,但两个独立单词之间必然存在空格、标点等分隔符,导致后顾根本感知不到分隔符另一侧的禁用词,因此会错误放过hello forbidden word1这类不符合要求的字符串。
规则要求的「紧邻前置内容不是forbidden」,本质是判定目标词的前一个独立单词不能是forbidden:两个词之间只允许出现分隔符,不能穿插其他词汇;如果禁用词和目标词之间隔了其他单词,哪怕距离很近也属于合法匹配场景。

修正后正则

通用版本(支持变长负向后顾的引擎:Python re、Java、PCRE、JS ES2018+)

.*(?<!\bforbidden\W+)\b(word1|word2|word3)\b.*

如果是调用整串匹配的matches()方法,可以加上首尾锚定:

^.*(?<!\bforbidden\W+)\b(word1|word2|word3)\b.*$

兼容版本(不支持变长后顾的引擎:Go标准库、ES2018之前的JS)

用负向先行提前排除违规组合,不需要变长后顾支持,逻辑完全一致:

^(?!.*\bforbidden\W+(word1|word2|word3)\b).*\b(word1|word2|word3)\b.*$

匹配逻辑说明

  • \b(word1|word2|word3)\b:匹配作为独立单词存在的目标词,避免误匹配word111这类包含目标词片段的长单词。
  • (?<!\bforbidden\W+):负向后顾校验:如果目标词前面紧邻若干非单词字符(空格、标点等单词分隔符),且这些分隔符前刚好是独立单词forbidden,则判定匹配失败。
  • 后顾仅匹配非单词字符\W+,一旦禁用词和目标词之间出现其他单词字符(即穿插了其他词汇,比如forbidden hello word1中的hello),就不会触发拦截,符合补充规则要求。
  • 兼容版本的(?!.*\bforbidden\W+(word1|word2|word3)\b)是前置负向断言:先扫描全串,只要不存在「forbidden独立单词+若干分隔符+目标词独立单词」的紧邻违规组合,再继续匹配包含目标词的合法字符串。

效果验证

  • hello forbidden word1:不匹配,目标词前一个独立单词为forbidden,属于违规场景
  • hello word1:匹配,目标词前无紧邻禁用词
  • forbidden hello word1:匹配,禁用词和目标词间隔了其他词汇,属于合法场景
  • forbidden, word2!:不匹配,禁用词和目标词之间仅存在标点、空格分隔,属于紧邻违规
  • unforbidden word3:匹配,前置词汇为unforbidden,不是禁用词本身
  • forbiddenword1:不触发匹配,word1不是独立单词,不符合目标词匹配规则

内容的提问来源于stack exchange,提问作者Vitto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:15:46