如何编写正则表达式匹配域名含指定字符串的所有URL?
解决方案
这里有个能精准满足你需求的正则表达式,它可以匹配所有域名中包含example的URL,同时兼容HTTP/HTTPS协议、各种域名后缀,还能避开周围的HTML标签干扰:
\bhttps?://[^/\s]*example[^/\s]*\S+
正则各部分拆解说明
\b:匹配单词边界,避免URL和周围的HTML标签(比如<b>、<br>)或其他文本粘连,确保我们抓的是独立的URLhttps?://:覆盖HTTP和HTTPS两种常见网页协议,?表示s是可选的[^/\s]*:匹配域名里example之前的任意字符(除了斜杠和空白符),允许前缀为空(比如直接是example.com这种域名)example:固定匹配我们要找的特定字符串,确保域名中包含它[^/\s]*:匹配example之后的域名剩余部分,同样排除斜杠和空白符,兼容所有域名后缀(.net/.com/.org等都没问题)\S+:匹配URL的路径及后续内容,\S表示非空白字符,+保证路径至少有一个字符;如果需要允许无路径的纯域名,可以改成\S*
测试你的示例文本
针对你提供的这段内容:
http://example.net/file/25404c920e2a5501fbb660ba1c093e59 http://notexample.com/view/858BA4159ED9B53
https://example.com/file/08558aa484fb1327d215fc6ce19da601/Transform.html http://notexample.com/view/567
这个正则会准确匹配到以下两个URL:
http://example.net/file/25404c920e2a5501fbb660ba1c093e59https://example.com/file/08558aa484fb1327d215fc6ce19da601/Transform.html
完美排除了域名是notexample的URL,完全符合你的要求。
额外适配建议
如果你的场景里还有其他协议(比如ftp),可以把https?://改成(https?|ftp)://;如果需要匹配不带协议的域名(比如example.com/path),可以调整开头为\b(https?://)?[^/\s]*example[^/\s]*\S+,不过这种情况可能会误匹配一些普通文本,建议根据实际场景调整。
内容的提问来源于stack exchange,提问作者senbon
相关产品推荐
相关产品推荐

