忽略RegEx中的不可见字符

时间:2018-10-22 19:11:39

标签: regex office365

我遇到了一个难题。

我目前正在尝试建立一个正则表达式,以过滤掉一些特别令人讨厌的骗局电子邮件。我敢肯定,您曾经看过它们,并使用了来自受感染网站的数据转储来威胁要公开私密视频。

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

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

/all (.*)your contacts

2 个答案:

答案 0 :(得分:1)

如果您要标记一个特定的字符串,则可以执行以下操作:

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

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

答案 1 :(得分:0)

大多数不可见字符只是空白。
这些与渲染哪个字符集无关紧要,
它可能是看不见的。

如果使用支持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}]