IP地址、域名、URL正则表达式优化及问题咨询
问题需求
需要生成符合以下定义的IP地址、域名、URL正则表达式:
- IP地址:示例
93.114.205.169,可带http:///https://前缀,可带www前缀,但不能包含路径,否则视为URL - 域名:示例
example.com、sub.example.com,可带http:///https://前缀,可带www前缀,但不能包含路径,否则视为URL - URL:示例
93.114.205.169/path、example.com/path、sub.example.com/path,必须包含资源路径,可带http:///https://前缀,可带www前缀
原正则存在的问题:
http://93.114.205.169被同时识别为URL和IP地址,按定义它应仅属于IP地址http://93.114.205.169/path被识别为URL的同时,其中的IP部分被单独识别为IP地址
修正后的正则规则
IP地址规则
[[rules]] id = "ip-address" description = "Potential IP Address detected." regex = '''\b(?:https?://)?(?:www\.)?(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b(?!/)''' entropy = 2 keywords = ["ip"]
核心优化点:
- 新增
(?:https?://)?(?:www\.)?匹配可选的http/https协议前缀和www子域名 - 末尾添加
(?!/)负前瞻断言,确保IP地址后没有斜杠(即无路径),既避免被误判为URL,也防止URL中的IP子串被单独识别
域名规则
[[rules]] id = "domain" description = "Potential domain name detected." regex = '''\b(?:https?://)?(?:www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b(?!/)''' entropy = 2 keywords = ["domain"]
核心优化点:
- 新增
(?:https?://)?(?:www\.)?匹配可选的协议前缀和www子域名 - 末尾添加
(?!/)负前瞻断言,确保域名后没有斜杠,避免被误判为URL,同时防止URL中的域名子串被单独识别
URL规则
[[rules]] id = "url" description = "Potential URL detected." regex = '''\b(?:https?://)?(?:www\.)?(?:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\/[^\s"<>]+\b''' entropy = 2 keywords = ["http", "https", "url"]
核心优化点:
- 强制要求路径部分
\/[^\s"<>]+,确保URL必须包含资源路径(至少一个斜杠加后续非空白、非引号尖括号的内容) - 匹配主体同时支持IP和域名格式,加上可选的协议与www前缀
- 移除了原规则中可选的路径逻辑,彻底避免无路径的IP/域名被识别为URL
内容的提问来源于stack exchange,提问作者hululu
相关产品推荐
相关产品推荐

