【问题标题】:Ignoring invisible characters in RegEx忽略 RegEx 中的不可见字符
【发布时间】:2018-10-22 19:11:38
【问题描述】:

我遇到了一个难题。

我目前正在尝试构建一个正则表达式来过滤掉一些特别讨厌的诈骗电子邮件。我相信你以前见过他们,他们使用来自受感染网站的数据转储来威胁要泄露私密视频。

这一切都很好,除了我在测试正则表达式时注意到其中一些消息在单词中间插入了特殊的不可见字符。就像你在这里看到的那样(我发现很难找到一个保存这些特殊字符的地方): Regexr link

我发现自己正在寻找一种方法来创建一个可能会忽略这些字符的正则表达式,因为有些电子邮件有这些字符,有些则没有。最后,我试图用类似的东西创建一个匹配

/all (.*)your contacts

【问题讨论】:

  • 我建议您首先将所有“非单词”字符替换为空字符串,然后您将拥有“正常”单词来搜索垃圾邮件单词。要替换的正则表达式应该是:'\W+'。

标签: regex office365


【解决方案1】:

如果您要标记一个特定的字符串,您可以这样做:

检测带有可选隐身字符的“电子邮件”:/e[^\w]?m[^\w]?a[^\w]?i[^\w]?l/

[^\w]? 将检测到任何不是字母或数字的内容。如果您看到字母之间使用了多个不可见字符,也可以使用 [^\w]*

【讨论】:

    【解决方案2】:

    大多数不可见字符只是空格。
    它们在哪个字符集中呈现并不重要,
    它可能是看不见的。

    如果使用支持 Unicode 的正则表达式引擎,您可能会坚持
    在您要查找的字符之间的空白类中。

    如果没有,您可以尝试使用等效类 [ ]

    \s =

     [\x{9}-\x{D}\x{1C}-\x{20}\x{85}\x{A0}\x{1680}\x{2000}-\x{200A}\x{2028}-\x{2029}\x{202F}\x{205F}\x{3000}]
    

    相同,但没有 CRLF
    [^\S\r\n] =

    [\x{9}\x{B}-\x{C}\x{1C}-\x{20}\x{85}\x{A0}\x{1680}\x{2000}-\x{200A}\x{2028}-\x{2029}\x{202F}\x{205F}\x{3000}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多