完全忽略正则表达式中的新行

时间:2018-10-28 16:28:09

标签: regex cpanel

我知道regex中的/s修饰符,但不适用于我的具体情况。

例如,我正在尝试创建一个垃圾邮件过滤器,以将网址与此类域名相匹配

  

https://www.theonlineleaflets.com/u=/544hfb34s21jv335hs/u

     

正则表达式:https:\/\/www\..+?\/u\/\w{18}\/u

问题在于,垃圾邮件发送者会随机插入换行符和=符号,例如:

<area  coords=3D"0,0,1000,1000" href=3D"https://www.theonlineleaflets.com/u=
/544hfb34s21jv335hs/u"/>

OR:

<area  coords=3D"0,0,1000,1000" href=3D"https://www.netprofessionalbitcoin.=
com/u/565i71cag5hd3kdh3mds/u"/>

OR:

<area  coords=3D"0,0,1000,1000" href=3D"https://www.theonlineleaflets.com/=
u/544hfb34s21jv335hs/u"/>

我非常确定不能忽略新行,但是我要问的是我错了,或者有人知道更好的正则表达式标记这些垃圾邮件发送者就足够了。

注意:这是针对cPanel的,因此我认为它是标准的PERL格式,而且我认为它仍然不支持/s之类的修饰符。

更新:似乎新行始终位于=符号之后,但是该符号可以位于url中的任何位置。

2 个答案:

答案 0 :(得分:2)

我想出了这个正则表达式,它考虑了潜在的换行符。

https:\/\/www\..+?\/=?(?:\s*?)?u(?:\s*?)?=?(?:\s*?)?\/.*?u

基本上,我使用(?:\s*?)?,它是任意数量的空白字符(包括换行符)的可选,非捕获,惰性匹配。如果要将其限制为仅换行符,请改用\nHere's演示。

答案 1 :(得分:1)

我已将您的正则表达式更改为支持'='和White Space(包括Newlines)。

这是正则表达式:

https:\/\/www\..+?\/[u=\s]+\/[\w=\s]+\/[u=\s]+

我更改的是使用字符类而不是文字匹配。这样,'='和换行符将被有效忽略,它将与您的所有示例匹配。

唯一的“问题”是我删除了“ {18}”量词(因为那些不好的字符占据了空间)。

根据评论

编辑

https:\/\/www\.[\s\S]+?\/[u=\s]+\/[\w=\s]+\/[u=\s]+

我将点'.'更改为字符类'[\s\S]'。现在网址中也可以有Newlines

关于18个限定词:在第二个示例中有20个字符,因此如果您限制该字符串,它将不匹配。