Telegram内容过滤的正则表达式引擎优化
3 个回答
正则优化在于精简与拆分。少用贪婪匹配,多用边界匹配;复杂正则拆成多个小正则,减轻单正则运算量。高频词单独字符串匹配快速过滤,再进正则池。异步任务队列扫尾,不阻塞主进程。Telegram消息结构有规律,利用结构剪枝,例如先判断是否群聊,是否链接等。
正则优化在于简洁和预编译。多使用确定性模式(固定关键词匹配),少用贪婪匹配模式(.*)。预先编译好正则式,避免重复编译。消息处理先粗筛(过滤无用字符),再正则细筛。并行处理可避免卡顿。最后,能不用正则就不用。
Telegram正则优化规则:避免复杂的嵌套结构,避免使用冗余的符号,比如\d等价于[0-9],?等价于{0,1}。当消息量大的时候优先使用关键字白名单+黑名单做粗筛,再使用正则做细筛。2、将出现频率高的词单独拿出来,而不是全部使用正则。3、考虑异步处理或者分批处理,而不是全部一次性处理。
使用正则时,注意.*等贪婪匹配容易卡顿,改为懒惰模式。另外,定期删除无用的规则,避免旧规则拖累新消息。最后,不要迷信正则万能,有时换个思路更好。