AdGuardHome正则表达式规则编写技巧
你是否还在为广告过滤规则不够精准而烦恼?是否想让家庭网络中的广告和第三方追踪程序无处遁形?本文将带你掌握AdGuardHome正则表达式规则编写技巧,让你轻松打造个性化的网络过滤系统。读完本文,你将能够:理解AdGuardHome正则表达式规则的基本语法,掌握常见场景下的规则编写方法,学会如何测试和优化你的规则。
AdGuardHome作为一款网络级别的广告和第三方追踪程序拦截DNS服务器,其核心功能之一就是通过规则过滤来实现对网络请求的控制。正则表达式规则作为一种强大的模式匹配工具,能够帮助你更精确地定义需要拦截或放行的网络请求。
正则表达式规则基础
AdGuardHome的正则表达式规则基于标准的正则表达式语法,但在使用时有一些特定的要求和限制。在AdGuardHome中,正则表达式规则通常以/开头和结尾,例如/example\.com/。这是因为AdGuardHome需要通过这种方式来区分正则表达式规则和普通的域名规则。
AdGuardHome的过滤功能主要由internal/filtering/filtering.go模块实现,其中包含了对各种规则的解析和处理逻辑。正则表达式规则的匹配过程就是在这个模块中完成的。
基本语法
正则表达式由普通字符和特殊字符(元字符)组成。普通字符包括大小写字母、数字和一些符号,它们在正则表达式中表示自身。而元字符则具有特殊的含义,用于构建复杂的匹配模式。
常见的元字符包括:
.:匹配除换行符以外的任意单个字符。*:匹配前面的字符零次或多次。+:匹配前面的字符一次或多次。?:匹配前面的字符零次或一次。^:匹配字符串的开始位置。$:匹配字符串的结束位置。[]:定义字符集合,匹配集合中的任意一个字符。():分组,用于改变匹配的优先级或提取匹配的内容。
规则格式
在AdGuardHome中,一个完整的正则表达式过滤规则通常包含以下几个部分:
- 规则类型:以
||开头表示域名规则,以/开头和结尾表示正则表达式规则。 - 正则表达式模式:用于匹配需要过滤的请求。
- 过滤动作:通常省略,默认为拦截。如果需要放行,可以在规则前加上
@@。
例如,/^https?:\/\/example\.com\//表示拦截所有以http://example.com/或https://example.com/开头的请求。
常见规则编写场景
拦截特定域名
如果你想拦截所有包含example.com的域名,可以使用以下正则表达式规则: /example\.com/
这个规则会匹配任何包含example.com的域名,例如www.example.com、mail.example.com等。
如果你只想拦截example.com这个精确的域名,可以使用^和$来限定匹配的开始和结束位置: /^example\.com$/
拦截特定路径
有时候,你可能只想拦截某个域名下的特定路径。例如,要拦截example.com下的/ads/路径,可以使用: /^https?:\/\/example\.com\/ads\//
这个规则会匹配http://example.com/ads/和https://example.com/ads/开头的请求,但不会匹配http://example.com/otherpath/。
拦截特定参数
有些广告或追踪请求会在URL中包含特定的参数,例如utm_source。你可以使用正则表达式来匹配这些参数: /utm_source=.*?/
这个规则会匹配任何包含utm_source=的URL参数。
放行特定请求
如果你需要放行某个原本会被拦截的请求,可以使用@@前缀。例如,要放行example.com的所有请求,可以使用: @@/example\.com/
规则测试与优化
编写好规则后,测试其有效性非常重要。AdGuardHome提供了查询日志功能,可以帮助你查看规则的匹配情况。你可以在AdGuardHome的管理界面中查看查询日志,了解哪些请求被拦截或放行,以及是由哪个规则匹配的。
另外,你还可以使用AdGuardHome的internal/filtering/filtering_test.go模块中的测试用例来测试你的规则。这些测试用例可以帮助你验证规则的正确性和性能。
优化规则时,需要注意以下几点:
- 尽量使用具体的匹配模式,避免过于宽泛的规则,以减少误拦截。
- 合理使用元字符,避免不必要的复杂性,以提高规则的执行效率。
- 定期审查和更新规则,以适应不断变化的网络环境。
高级技巧
分组与引用
正则表达式中的分组功能可以帮助你提取匹配的内容,并在后续的处理中使用。例如,你可以使用分组来匹配不同的域名部分: /^(www|mail|news)\.example\.com$/
这个规则会匹配www.example.com、mail.example.com和news.example.com。
正向预查与负向预查
正向预查和负向预查可以帮助你在不消耗字符的情况下进行条件匹配。例如,要匹配example.com但不匹配www.example.com,可以使用负向预查: /^(?!www\.)example\.com$/
规则组合
你可以将多个正则表达式规则组合起来,实现更复杂的过滤逻辑。例如,你可以先拦截所有广告域名,然后放行某些特定的广告请求。
AdGuardHome的过滤规则处理流程可以用以下流程图表示:
总结
正则表达式规则是AdGuardHome中强大而灵活的工具,掌握其编写技巧可以让你更精确地控制网络请求。通过本文介绍的基础语法、常见场景、测试优化方法和高级技巧,你可以编写出高效、准确的过滤规则,打造一个更干净、更安全的网络环境。
希望本文对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言。别忘了点赞、收藏和关注,以便获取更多关于AdGuardHome的使用技巧和教程。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



