REGEX

REGEX #

本文介绍如何使用 SCP-079-REGEX 的机器人实例。


简介 #

SCP-079 工作组 通过 SCP-079-REGEX 管理着 SCP-079 旗下所有机器人使用的正则表达式。

REGEX 能方便地管理 SCP-079 系列的机器人所使用的正则表达式规则,若无 REGEX 配合,NOSPAM、WATCH、CLEAN 均将无法正常工作。

  1. SCP-079-REGEX 项目未公开本项目 REGEX 机器人实例所使用的正则表达式,且暂无公开的计划。
  2. 本文使用手册不讲述正则表达式的语法,请自行学习正则表达式的相关语法。
  3. 本文中假设 SCP-079 旗下所有机器人的所有功能均被开启,实际上本文所述的所有封禁、删除均受白名单操作降级群组对机器人的配置的共同调控。
  4. 本文中约定使用 && 表示 || 表示 () 表示 运算的优先顺序

运作流程 #

以下介绍机器人的工作流程,在进行使用和设置前,建议您了解此流程。


维护方式 #

参与管理 REGEX 机器人的成员,均应在 SCP-079-REGEX 专用群组中进行操作,并在 SCP-079-TEST 中对所添加的规则进行测试。

成员在 SCP-079-REGEX 群组中可以执行的操作有:

  • 检索
  • 添加
  • 删除

生效方式 #

每执行添加或删除操作后,REGEX 将通过 EXCHANGE 频道,自动推送受影响的规则集给其他需要的机器人。

统计 #

其他机器人将在每日定时地向 REGEX 通报所使用规则的触发情况,REGEX 将根据这些数据对规则进行排序、显示、自动清理。


规则集说明 #

下面将对 REGEX 支持的所有规则集做简要说明。


广告用语 #

规则集代号:ad ada adb adc … adz

注 1: 本文在此约定使用 ad* 指代 ada 规则集adz 规则集 中的任意一个规则集。

注 2: 触发 emoji 计数规则的视为触发了 ad*

  • NOSPAM:
    • 用户消息触发 (ad 规则集 || ad* 规则集) && (con 规则集 || iml 规则集 || pho 规则集 || 联系方式收录) 时,将全局封禁触发者,并加入全局黑名单。
    • 用户消息触发 ad* 规则集 中任意两个规则集时,将全局封禁触发者,并将其加入全局黑名单。

头像分析 #

规则集代号:ava

  • NOSPAM:将使用该类规则分析用户头像 OCR 结果,若触发该类规则集,将导致该用户被全局封禁,并将其加入全局黑名单。

敏感检测 #

规则集代号:bad

  • NOSPAM:用户消息触发此规则集,将更新用户评分,并自动举报至 WARN,令其提交至群组管理员处理。

自动封禁 #

规则集代号:ban

  • NOSPAM:用户消息、昵称、头像、或简介触发此规则集,将全局封禁触发者,并将其加入全局黑名单。

简介检查 #

规则集代号:bio

  • NOSPAM:用户昵称或简介触发此规则集,将全局封禁触发者,并将其加入全局黑名单。

联系方式 #

规则集代号:con

  • NOSPAM:用户消息触发 (ad 规则集 || ad* 规则集) && (con 规则集 || iml 规则集 || pho 规则集 || 联系方式收录) 时,全局封禁触发者,并加入全局黑名单。

自动删除 #

规则集代号:del

  • NOSPAM:用户消息触发此规则集,将删除触发的消息,并更新该用户的评分。

文件名称 #

规则集代号:fil

  • NOSPAM:用户发送消息中的文件名触发此规则集,将全局封禁该用户,并将其加入全局黑名单。

IM 链接 #

规则集代号:iml

  • CLEAN:用于检测消息中是否含有 IM 链接
  • NOSPAM:用户消息触发 (ad 规则集 || ad* 规则集)&& (con 规则集 || iml 规则集 || pho 规则集 || 联系方式收录) 时,全局封禁触发者,并加入全局黑名单。

电话号码 #

规则集代号:pho

  • CLEAN:用于检测消息中是否含有电话号码
  • NOSPAM:触发 (ad 规则集 || ad* 规则集 ) && (con 规则集 || iml 规则集 || pho 规则集 || 联系方式收录) 时,全局封禁触发者,并加入全局黑名单。

名称封禁 #

规则集代号:nm

  • NOSPAM:全局封禁触发者,并加入全局黑名单。

RM 笑话 #

规则集代号:rm

  • TIP:回复触发消息,提示他人谨慎执行该操作。

短链接 #

规则集代号:sho

  • CLEAN:用于检测消息中是否包含短链接。

特殊中文 #

规则集代号:spc

  • 大部分机器人:用于 normalize 文本
  • LANG:用于判断特殊中文

特殊英文 #

规则集代号:spe

  • 大部分机器人:用于 normalize 文本
  • LANG:用于判断特殊中文

贴纸删除 #

规则集代号:sti

  • NOSPAM:用于判断贴纸是否在推广贴纸包中。

Telegram 链接 #

规则集代号:tgl

  • CLEAN:用于判断消息中是否含有 Telegram 链接。

Telegram 代理 #

规则集代号:tgp

  • CLEAN:用于判断消息中是否含有与 Telegram 有关的代理。

追踪封禁 #

规则集代号:wb

  • NOSPAM:用于进行追踪封禁
  • WATCH:用于进行封禁追踪
  • 其他部分机器人:用于在特殊情形下检查昵称

追踪删除 #

规则集代号:wd

  • NOSPAM:用于进行追踪删除
  • WATCH:用于进行删除追踪

测试用例 #

规则集代号:test

  • REGEX:SCP-070-TEST 群组成员可发送消息至 SCP-070-TEST 群组检测是否匹配正则表达式

检索正则表达式 #

以下介绍 REGEX 所支持的检索正则表达式的方法。注意:操作应在 SCP-079-REGEX 群组中进行。


查阅全部 #

您可使用 /ls 规则集代号 显示该规则集中的全部内容,该列表默认按照平均触发次数的降序排列。

使用 /ls 规则集代号 asc 将按照平均出发次数的升序显示该规则集。

搜索 #

您可使用 /search 规则集代号 内容/s 规则集代号 内容/find 规则集代号 内容

除已有的规则集代号外,这三个命令均支持规则集代号 all 来搜索所有规则集。

标签说明 #

正则表达式使用 (?#注释内容) 表示注释。REGEX 使用正则表达式注释语法为正则表达式附加标签信息。

目前,支持的标签有:

  • 同步标签:(?# 规则集代号1 规则集代号2 规则集代号3)
    • 对含有同步标签的正则表达式进行操作时,SCP-079-REGEX 会在同步标签中的每个规则集中重复执行。
  • 临时标签:(?# temp) [该功能即将被调整]
    • REGEX 会自动追踪包含临时标签的正则表达式的触发情况,如该正则表达式连续 14 日不被触发,其将被自动移除。
    • ban 规则集 的任意规则均视为附加了临时标签,如不希望 ban规则集 中的正则表达式表示式因连续14日不被触发而被移除,请使用永久标签 (?# forever)
  • 若需要某条正则表达式不在OCR结果中生效,请使用(?#nocr)

注:正则表达式注释语法(?#注释内容)中,并未要求注释内容与#间要有一个空格,但为了美观SCP-079-REGEX会在此自动加上一个空格。


添加与删除正则表达式 #

此处介绍如何添加或删除规则。注意:操作应在 SCP-079-REGEX 群组中进行。


添加正则表达式 #

在 SCP-079-REGEX 群组中通过 /add 任意规则集代号 正则表达式/ad 任意规则集代号 正则表达式 添加正则表达式

例如,分别发送以下两条命令:

/add wb 专业引流

/ad del 1a2b3c4d5e6f

在同规则集中添加与已有正则表达式近似的正则表达式时,将触发替换询问。

如需将相同的正则表达式添加至多个规则集中,可使用 /same 规则集代号1 规则集代号2 规则集代号3 规则集代号4 回复某 /add 命令完成。示例如下:

在执行完 /ad del 1a2b3c4d5e6f 后,1a2b3c4d5e6f 被添加进了 del 规则集,此时若需将 1a2b3c4d5e6f 同时加入 nm 规则集,只需用 /same nm 这个命令来回复之前的那条 /ad del 1a2b3c4d5e6f 消息即可;

若此时又需将 1a2b3c4d5e6f 加入 ad 规则集test 规则集,只需再次用 /same ad test 命令来回复之前的那条 /ad del 1a2b3c4d5e6f 消息即可。

该情景下的操作还可进一步简化:REGEX 会读取正则表达式中的注释部分,只需使用注释注明包含该正则表达式的所有规则集即可。

例如该情景下使用 /ad del 1a2b3c4d5e6f(?# del nm ad test) 即可一键将 1a2b3c4d5e6f(?# del nm ad test) 加入 del 规则集nm 规则集ad 规则集test 规则集


删除正则表达式 #

在 SCP-079-REGEX 群组中通过 /remove 任意规则集代号 正则表达式/rm 任意规则集代号 正则表达式 可删除某正则表达式。

例如,分别发送以下两条命令:

/remove wb 专业引流

/rm del 1a2b3c4d5e6f

如需将相同的正则表达式从多个规则集中删除,可使用 /same 规则集代号1 规则集代号2 规则集代号3 规则集代号4 回复某 /remove 命令完成。示例如下:

在执行完 /rm del 1a2b3c4d5e6f 后,1a2b3c4d5e6f 将从 del 规则集 中被删除,此时若需将 1a2b3c4d5e6f 同时从 nm 规则集 删除,只需用 /same nm 这条命令回复之前的那条 /rm del 1a2b3c4d5e6f 消息即可;

若此时又需将 1a2b3c4d5e6fad 规则集test 规则集 中删除,只需再次用 /same ad test 这条命令回复之前的那条 /rm del 1a2b3c4d5e6f 消息即可。

该情景下的操作还可进一步简化:REGEX 会读取正则表达式中的注释部分,只需使用注释注明包含该正则表达式的所有规则集即可。

例如该情景下使用 /rm del 1a2b3c4d5e6f(?# del nm ad test) 即可一键将 1a2b3c4d5e6f(?# del nm ad test)del 规则集nm 规则集ad 规则集test 规则集 中删除。


测试表达式 #

本节介绍如何测试正则表达式。注意:操作应在 SCP-079-TEST 群组中进行。


触发测试 #

SCP-079-TEST 群组中成员可通过发送或转发待测试的消息测试当前文本所触发的正则表达式。

REGEX 机器人将读取消息正文、来源名称、贴纸包标题、贴纸名称,并检查相关正则表达式,并在 SCP-079-TEST 群组中输出被触发的正则表达式列表。


其他命令说明 #

  • /comment ad* 注释内容:使用该命令为ad*规则集添加注释
    • 例如:/comment ada 黑产 注释内容不会影响其他机器人的运行,仅在 /ls 命令出发的列表和 SCP-079-MANAGE 群组成员使用 /status regex 回复的列表中显示。
  • /count:要求其他机器人立刻回报当日统计数据
  • /ls [word_type]:显示word_type类别的规则列表,后面不跟类别则显示已有的所有类别及代号
  • /push [word_type]:手动推送某类规则,若 [word_type]all,则推送全部规则
  • /reset [word_type]:清除某类规则计数数据,若 [word_type]all,则清除全部规则计数

理念 #

本节介绍使用 REGEX 管理本项目机器人使用的正则表达式的部分理念,该节内容仅供参考。

注: 本节内容为部分管理员观点,未与 SCP-079 工作组其他管理员讨论,不代表 SCP-079 工作组的建议,仅供参考。


组合规则 #

正则表达式不考虑消息的语境,易出现错误,我们建议对于触发后可能产生高危操作的规则集,例如封禁,应当尽量使用多条正则表达式组合,减少机器人仅依靠单条正则表达式做出封禁的决定。

ad* 规则集 间,ad* 规则集con 规则集iml 规则集pho 规则集 间,以及 ad 规则集ad* 规则集con 规则集iml 规则集pho 规则集 间,均应当避免重叠,否则将易产生误判。

寻找通用特征、宁缺毋滥 #

受限于多种因素,正则表达式很难处理所有类型的广告,SCP-079-REGEX 群组成员应该考虑该正则表达式的目标与预期效果,为了过于少见的情况花费过多的精力是不必的(我们的目标是为群组管理员提供帮助,而非代替群组管理员)。SCP-079-REGEX 群组成员应当正视该现象,SCP-079-REGEX 群组成员应该处理的广告须符合两个原则中任意一个:

  • 含有通用特征,易于处理
  • 虽不含通用特征,但短期内大量出现

SCP-079-REGEX 群组成员应该追求识别效果与成本(包括人力、错误风险、服务器性能等)的平衡。

SCP-079-REGEX 群组成员在添加正则表达式时应该寻找某类广告的通用特征,而非个例特征(这需要 SCP-079-REGEX 群组成员多观察广告样本的特征)。过度使用依赖个例特征的正则表达式会大大降低 NOSPAM 的识别能力与抗干扰能力。但是寻找广告的通用特征往往比寻找广告的个例特征困难,因此我们建议将两者结合使用。应该以依赖通用特征的正则表达式为主的同时,同时以依赖个例特征的正则表达式为辅助,用于处理未被长期有效的正则表达式识别的短期内大量出现的广告内容。根据我们的实践经验,依赖个例特征的正则表达式失效速度较快,Spammer 总是擅于逃避正则表示的检测,因此依赖个例特征的正则表达式应该为短期规则,通常应该添加 temp标签。

当遇到未能识别的广告内容时,请优先尝试寻找该类广告的通用特征,如果很难找到该类广告的通用特征且该类广告并非大量出现,则不必考虑该类广告的个例特征,此时最好的做法是——什么也不做


联系方式收录机制 #

SCP-079-NOSPAM 将根据 REGEX 添加的规则执行联系方式收录,详情如下。


得益于腾讯公司的较为严格的账号控制政策,Spammer 通常不能频繁更换 QQ 账户Wechat 账户,该内容足以作为寻找 Spammer 的重要特征,因此 SCP-079-NOSPAM 会于已被其封禁的用户的消息中根据正则表达式寻找并收录 Spammer 的联系方式。昵称或简介中出现已收录的联系方式的用户将被NOSPAM封禁,

NOSPAM 将提取正则表示式中名为 con 的捕获组,并去除其中可能存在的空白字符。

例如,在 SCP-079-REGEX 群组中分别发送以下两条命令:

/add con QQ号码为:(?P<con>\d{4,})

/add ad a1b2c3d4

注 1: 以上内容仅为示例,实际环境中检测 QQ 号 的正则表达式远比该示例复杂。

然后在使用 NOSPAM 的群组中发送

a1b2c3d4 QQ号码为:123456789

将导致 NOSPAM 封禁该用户,并记录该联系方式 123456789,记录结果将于证据存放频道公示。

SCP-079-MANAGE 群组成员可使用 /remove_contact 具体联系方式 来移除已收录的联系方式(例如:/remove_contact 123456789)。即使不通过命令手动移除,收录的联系方式也将于一定时间后自动清空。

注 2: 未实际导致用户遭受封禁则不进行联系方式收录。

注 3: NOSPAM 将只收集 con 规则集iml 规则集pho 规则集中名为 con 的捕获组,NOSPAM 不会收录除此三者之外的其他规则集中的 con 的捕获组,也不收录 con 规则集iml 规则集pho 规则集中的其他 tag 的捕获组。

注 4: NOSPAM 不收录少于 6 字符的联系方式,防止内容过短而导致的误判。


问与答 #

常见问题汇总。


Q:为什么 pho规则集iml规则集 要从 con规则集 中分离呢?

A:CLEAN 需要单独使用 pho规则集iml规则集

Q:为什么应该使用 (?# temp) 标签?何时该使用该标签?

A:使用该标签能减少失效和错误的正则表达式被长期保存,减少服务器压力和正则表达式维护难度