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

正则URL白名单规则问题:同行违规URL未拦截及域名连写误判

解决URL拦截正则的两个问题

问题分析

你当前的正则存在两个核心问题:

  • 同行的白名单URL会干扰违规URL的匹配,导致后者无法被拦截
  • 连写域名(如www.badurl.comexample.com)会被整体匹配拦截,无法保留白名单的example.com部分

修改方案

直接调整正则表达式,修正匹配逻辑,同时修复原代码中HTML实体转义的错误(把&改为&,否则无法匹配含&的URL)。修改后的代码如下:

import re

def link_remover(message):
    # 匹配所有非白名单URL,排除example.com及其子域名、带路径的合法链接
    pattern = r'\b(?!(?:https?://)?(?:www\.)?example\.com(?:/.*)?\b)(?:https?://)?(?:www\.)?[-a-zA-Z0-9@:%_+.~#?&/=]{2,256}\.[a-z]{2,24}\b(?:/[-a-zA-Z0-9@:%_+.~#?&/=]*)*'
    message = re.sub(pattern, "[URL Removed]", message)
    return message

关键改进点

  1. 解决同行URL拦截问题:
    添加了正向负预查(?!(?:https?://)?(?:www\.)?example\.com(?:/.*)?\b),精准排除所有example.com相关的白名单链接(包括带http/https前缀、www前缀、带路径的情况),确保同行的违规URL能被正常匹配替换。

  2. 解决连写域名问题:
    通过\b单词边界和域名匹配规则,正则会优先匹配到违规域名的合法结尾(如.com),后续的example.com会被识别为独立的白名单链接,从而只替换违规部分,保留example.com。

测试验证

  • 输入:Check http://www.example.com and www.badurl.com
    输出:Check http://www.example.com and [URL Removed]
  • 输入:www.badurl.comexample.com
    输出:[URL Removed]example.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:12:33