Feed Filter Maker 过滤规则为什么没按预期生效?
Feed Filter Maker 的过滤规则不生效,通常不是网站坏了,而是规则被当成正则表达式处理了。每个包含/排除输入框里的多个值会用 | 拼成一个正则表达式,只要其中任意一段能匹配条目文本,该条就被判定命中。所以关键词里出现正则特殊字符、包含与排除同时命中、大小写设置不一致、或匹配到了条目正文里的无关文字,都会让结果和预期不同。
规则是怎么被拼起来的
根据页面说明,每个过滤器(包含和排除各算一个)的文本框内容会被合并成单个正则表达式,各值之间用 | 分隔。
例如包含框里写:
[720p] [English]
实际等价于:
720p|English
也就是说,[720p] 和 [English] 并不是“同时满足 720p 和 English”,而是“满足 720p 或 English”。这是最常见的误解来源。
由此带来的几个坑
- 方括号不是分组,是字符集。 在正则里
[720p]表示“匹配 7、2、0、p 中的任意一个字符”。如果你想要字面量方括号,需要转义成\[720p\]。 - 多个词是“或”不是“与”。 想让条目同时包含两个词,得自己写正则,比如
(?=.*720p)(?=.*English),而不是简单并列。 - 特殊字符要转义。
.*+?()[]{}^$|\在正则里有特殊含义。想匹配字面量,前面加\。 - 空格会被保留。 写
720p English(中间空格)会当成“匹配720p English这个连续字符串”,而不是两个词。
包含和排除同时命中时会怎样
页面没有给出包含与排除冲突时的优先级说明,因此不要依赖“排除一定赢”或“包含一定赢”的假设。稳妥做法是让两组规则互不重叠:
- 包含框只放你确实想要的特征。
- 排除框只放你明确不想要的特征。
- 避免同一个词既出现在包含里又出现在排除里。
如果发现某条该被排除却仍出现,先检查它是否被包含规则命中、以及排除词是否因正则语法没写对而失效。
大小写设置的影响
页面提供 Ignore Case(忽略大小写)和 Don't Ignore Case(区分大小写)两个选项,并说明“大多数情况下你会想忽略大小写,但可以选择不忽略”。
- 选 Ignore Case:
English能匹配english、ENGLISH。 - 选 Don't Ignore Case:只匹配大小写完全一致的形式。
如果规则看起来“有时生效有时不生效”,先确认这个开关的状态是否和你的关键词大小写一致。
匹配的是条目全部文本
页面明确说明:每个条目的所有文本都会被搜索。这意味着关键词可能命中标题之外的内容,比如正文、作者、摘要、链接文字等。
典型表现:
- 你只想按标题过滤,但某个词出现在正文里,条目也被保留或排除。
- 排除词恰好是常见词(如
the、news),会误伤大量条目。
想减少误匹配,尽量用足够具体的词或正则,而不是宽泛的短词。
排查清单
按顺序检查,基本能定位问题:
- 看拼接结果:把包含/排除框里的内容按
|连起来,想象它作为正则去匹配条目文本。 - 转义特殊字符:方括号、点号、加号等想按字面匹配就加
\。 - 确认“或/与”:并列多个词默认是“或”;要“与”得写前瞻正则。
- 统一大小写设置:关键词大小写和
Ignore Case选项保持一致。 - 缩小匹配范围:避免用会出现在正文里的常见词。
- 用 Test 验证:页面提供
Test按钮,改完规则先测试再复制过滤后的订阅源地址。
验证规则是否生效
页面给出的流程是:
- 填写源订阅地址(source feed url)。
- 设置包含/排除关键词与大小写选项。
- 点击
Test查看过滤结果。 - 确认无误后,复制
filtered feed url,粘贴到你的阅读器。
如果 Test 结果符合预期、但阅读器里不对,问题多半在阅读器缓存或你复制的地址不是最新的过滤源地址,重新复制一次即可。
保存与备份的注意点
- 给订阅源起名字后会自动保存到浏览器,下次回来可在下拉框里找到。
Export OPML用来备份浏览器里的订阅源。Import OPML会把 OPML 里的源与浏览器里的合并;同名源会被 OPML 文件里的版本替换。
所以导入前先导出备份,避免同名规则被覆盖后无法找回。