如何创建正则表达式过滤指定子域名的URL请求
筛选特定子域名的URL请求
针对你的需求——严格匹配URL中w.x.y.z部分为fun.foo.bar.net,原正则存在两个核心问题:
- 未转义
.:正则中.是通配符,会匹配任意字符,导致funXfooYbarZnet这类字符串也会被误判 - 未限定域名边界:没有明确目标域名的前后分隔符,可能匹配到包含该域名的更长域名(比如
fun.foo.bar.net.abc.com)
正确的正则表达式
需要同时解决上述两个问题,明确目标域名的边界并转义特殊字符:
private static final Pattern PAT = Pattern.compile("https?://.*?\\.fun\\.foo\\.bar\\.net(:|/|$)");
https?://:匹配HTTP或HTTPS协议.*?:非贪婪匹配协议后的前缀域名段(避免过度匹配)\\.fun\\.foo\\.bar\\.net:转义每个.,严格匹配目标域名(:|/|$):限定目标域名的后续边界,只能是端口冒号、路径斜杠或URL结尾
简化的代码实现
你不需要遍历分组,因为核心需求是判断是否匹配,直接用find()即可:
private static final Pattern PAT = Pattern.compile("https?://.*?\\.fun\\.foo\\.bar\\.net(:|/|$)"); public boolean isTargetRequest(String requestUrl) { return PAT.matcher(requestUrl).find(); }
如果需要极致严谨,可以把.*?替换为合法域名字符的匹配规则[a-zA-Z0-9\\-\\.]+,避免匹配到非法字符,但非贪婪匹配在大多数场景下已经足够实用。
内容的提问来源于stack exchange,提问作者90abyss
相关产品推荐
相关产品推荐

