关键词与正则

推特关键词屏蔽:按关键词或正则拉黑账号(为什么屏蔽词不够用)

词库页:关键词、一条前瞻正则和白名单
简要回答
  • X 的屏蔽词(静音词)隐藏推文。它们从不屏蔽,也从不看昵称、用户名或简介。
  • X Spam Blocker 把一个关键词变成一条屏蔽候选。你确认,然后它才屏蔽。
  • 先匹配用户名和昵称。正文是精度差得最远的字段。
  • 凡是无辜的人也会用的词,都用前瞻正则再要求第二个条件。

「按关键词屏蔽账号」听起来像 X 该有的一项设置,可它没有。X 有的是屏蔽词(静音词),那是另一件事,解决的是另一个问题。这篇讲的是这条线画在哪里,以及怎样写出能抓住垃圾号、又不误伤正在谈论他们的人的关键词和正则。这就是推特关键词屏蔽真正要做的事。

屏蔽词(静音词)实际做什么

X 的屏蔽词(静音词)在:设置 → 隐私和安全 → 静音和屏蔽 → 屏蔽词(静音词)。你添加一个词或短语,选择它作用于时间线、通知还是两边,是否只对你未关注的人生效,以及持续多久。

在这些限度之内它很好用,也是对付一个你已经厌倦的话题的合适工具。但注意它碰不到的地方:

  • 它隐藏推文。账号本身不动,仍然可以关注你、回复你、引用你、给你发私信。
  • 它匹配的是推文正文。它不匹配昵称、用户名或简介,而机器人最可靠的自我宣传就写在那里。
  • 没有任何办法把一次命中变成隐藏以外的动作。
  • 静音是按词来的,而且要永久维护:新的垃圾脚本永远需要一个新词。

关键词静音和关键词屏蔽

X 的屏蔽词(静音词)关键词屏蔽(本插件)
对推文的效果对你隐藏作者被屏蔽后,从页面上移除
对账号的效果没有已屏蔽:不能关注、回复、引用或给你发私信
匹配的字段正文正文、昵称、用户名、简介
模式词和短语子串,加上完整的 JavaScript 正则
会回溯生效不会不会,只处理时间线上已经出现的内容
确认不适用先过目候选列表,然后才会执行
可撤销删掉这个词在日志里点「解除」,一次即可

它们是互补,不是竞争。静音一个话题,屏蔽一个账号。如果烦你的是一个主题,屏蔽词(静音词)更干净。如果烦你的是一串明天会换一条推文再来的账号,能了结这件事的是关键词屏蔽。

该匹配哪个字段

在设置里,四个字段是各自独立的开关,这个选择比规则怎么写更重要。按「命中是不是你希望的那个意思」从高到低:

  1. 用户名。 用户名是刻意选的,几乎不会碰巧。用户名里的 airdrop 近乎必中。
  2. 昵称。 几乎一样好,仿冒者和赠送机器人会把说辞放在这里。
  3. 简介。 适合站外联系方式和推广用语。只有插件已经见过其主页数据的账号才有,所以把它当作加分,不要当作基础。
  4. 正文。 最显眼的选择,也是最差的一个。含糊的东西都在这里:批评、引用、玩笑,以及有人在问这件事是不是骗局。

具体一点:开着正文时,关键词 giveaway 既会抓到机器人,也会抓到写下 “another fake giveaway in my replies” 的人。关掉正文、打开用户名,它会抓到 @Giveaway_King2026,放过那句抱怨。

写出站得住的关键词

关键词是普通的、不区分大小写的子串:没有语法,一行一个。三个习惯能让它们可靠:

  • 优先用短语,而不是单词。 claim your reward 是安全的,claim 不是。
  • 记住子串不认词边界。 art 会匹配 “start”、“particle” 和 “@artist”。如果你要的是这个词本身,用正则框和 \bart\b。
  • 一个想法一条规则。 能用一句话说清的规则,以后才修得了。又长又巧的规则,第一次误伤就会被整段删掉。

插件还自带一份很小的内置列表,针对某一类回复垃圾,在第一次运行时并入你的词库。它只做加法:你删掉其中任何一行,就会保持删除。

你需要的那一点正则

模式放进正则框,一行一个,使用 JavaScript 语法,两边不要加斜杠。五样东西几乎能覆盖全部:

片段含义示例
|或者airdrop|giveaway|presale
\b词边界\bdm\b:「dm」,而不是「admin」
?可选字符signals?:signal 或 signals
.*任意内容、任意长度free.*mint
(?=…)还必须包含见下文

这个引擎有两个特性值得记住。模式不区分大小写,所以永远不要写 [Aa]irdrop。而且它们在编译时不带 Unicode 标志,因此 \p{L} 一类写法没有用。要覆盖非 ASCII 字符,请用明确的字符范围。

双条件写法

这是唯一值得学的一种构造,因为它能把一个太宽的词变成一条安全的规则。(?=…) 是前瞻:它断言某样东西存在,但不消耗它。连续几个,意思就是「这些都必须在某处出现」。

(?=.*airdrop)(?=.*\b(dm|telegram)\b)

读作:提到了空投,并且把你往私人渠道里推。骗局两件都做。抱怨骗局的人只做第一件、不做第二件,于是碰不到。任何有歧义的词都可以这样救回来:给它配一个陪同条件,垃圾总有、日常说话很少有。比如一个联系渠道、像 claim 这样的祈使,或者一个短链接。

匹配是针对正文、昵称、用户名和简介拼在一起的文本,这有两个后果。一对前瞻的两半可以由不同字段满足:用户名里含有 airdrop,加上一条写着 “DM me” 的推文,就是一次命中。而且 ^ 和 $ 并不表示推文的开头和结尾,所以请写不锚定的模式。

规则看到文本之前发生了什么

你的规则不是只对着页面上的原始文本测试。插件会做出三个版本,逐个尝试:

  1. 原始文本,和页面上完全一样。因此写成要匹配标点或全角字符的规则仍然有效。
  2. 清理后的版本:去掉隐形字符,再做 Unicode 规范化,让全角、带圈和上下标字母折回普通字母。
  3. 收紧后的版本:在清理后的文本上去掉每一个空格、标点和表情,只留下字母和数字。

第三个版本就是为什么垃圾号用表情把一个词拆开时,关键词仍然能命中。你的关键词会经过同样的处理,所以你从一条垃圾回复里原样复制出来的短语,连隐形字符一起,仍然能当过滤用。为什么需要这些,写在隐形字符手法里。

白名单是过滤的一部分,不是安全网

词库里的第三个框接受用户名,一行一个,不带 @。标签是「白名单 handle(一行一个,不带 @)」。这些账号永远不会被标出,也永远不会出现在候选里,无论他们发什么。

把它当成第一步,而不是事后补救。最容易被一条宽规则抓到的,是你看得最多的账号:圈子里讨论骗局的人、引用机器人的人,以及用着同一套词汇的人。花三十秒把他们放进白名单,你才有余地把规则写得更狠。

信任一条规则之前先测试

  1. 加上规则,开着扫描,并让全自动保持关闭。这是默认值,也是它成为默认值的原因。
  2. 刷一段热闹的回复区,看着候选。每一行都会写出标出它的规则。
  3. 先读列表,先不要屏蔽。一条规则抓出三个明显的机器人、外加一个你认识的人,就需要先加陪同条件再用。
  4. 只有一条规则连续两次都给出干净的列表,才考虑让它不用过目就运行。即便如此,你在意的账号也要先放进白名单。

围绕这件事的完整流程,包括节奏和限流,写在如何在推特上批量屏蔽账号里。

常见问题

X 自己能按关键词屏蔽账号吗?

不能。X 可以静音词语,把匹配的推文从时间线和通知里隐藏,也可以手工屏蔽一个你点名的账号。它没有任何功能能把一个关键词变成一次屏蔽,屏蔽词(静音词)也从不对照昵称或简介匹配。

X 允许设置多少个屏蔽词(静音词)?

X 没有公布一个硬性数字,实际中人们会维护很长的列表。限制不在数量,而在于一个屏蔽词永远只是隐藏一条推文。那个账号仍然可以关注你、回复你、给你发私信。

关键词规则会作用到我关注的账号吗?

插件看得到的每一条推文都会,包括你关注的账号。白名单存在的原因正是这个。把你在看的账号放进去,任何规则都碰不到他们。

这里的正则区分大小写吗?

不区分。模式在编译时不区分大小写,所以不需要 [Aa] 这样的字符类,也不需要行内标志。不过它们在编译时不带 Unicode 标志,因此 \p{...} 属性转义不会生效。

关键词会匹配到另一个词里面的片段吗?

会。关键词是普通子串,所以 art 会匹配 start 和 @artist。如果这会造成误伤,把这个词放进正则框,并用 \b 词边界包起来。

确认之后,在 X 上批量屏蔽垃圾号

免费 Chrome 插件。无需账号、没有服务器、没有追踪。

添加到 Chrome