求匹配非HTTP/HTTPS开头的IP与FQDN的有效正则表达式
问题背景
用户提供文本:
"我打开了https://my.javac.com/abcd/efgh/khj,用于10.9.14.5、my.supernova.javavpn.com的 uptime 监控和文本采集,并且通过ssh root@javavpn.com连接。"
需求是从中提取非HTTP/HTTPS开头的IP地址(如10.9.14.5)和FQDN(完全限定域名,如my.supernova.javavpn.com、javavpn.com),此前尝试的正则表达式无法正常工作,需要有效解决方案。
有效正则表达式方案
核心思路
先用负向预查排除http:///https://开头的字符串,再分别匹配符合格式的IP地址和.com结尾的域名,确保只提取目标内容。
正则表达式
\b(?!https?:\/\/)(?:\d{1,3}(?:\.\d{1,3}){3}|[-a-zA-Z0-9_.]+(?:\.[-a-zA-Z0-9_]+)*\.(?:com|COM))\b
规则拆解
\b:单词边界,保证匹配的是完整的IP或域名,避免截取片段(?!https?:\/\/):负向预查,直接排除以http://或https://开头的内容- 非捕获分组
(?:...)用于逻辑分组:\d{1,3}(?:\.\d{1,3}){3}:匹配xxx.xxx.xxx.xxx格式的IP地址(若需严格校验每段0-255,可替换为精确规则)[-a-zA-Z0-9_.]+(?:\.[-a-zA-Z0-9_]+)*\.(?:com|COM):匹配.com/COM结尾的多级域名,支持如my.supernova.javavpn.com这类嵌套域名
\b:结尾单词边界,确保匹配完整性
测试结果
对目标文本匹配后,将成功提取:
10.9.14.5my.supernova.javavpn.comjavavpn.com
扩展说明
- 若需支持更多顶级域名(如.net、.org),可修改
(?:com|COM)为(?:com|COM|net|NET|org|ORG) - 若需严格校验IP合法性,可将IP匹配段替换为:
(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
内容的提问来源于stack exchange,提问作者Rajarshi Das
相关产品推荐
相关产品推荐

