我怎样才能给这个正则表达式写一个相反的正则表达式?

时间:2019-01-29 05:38:20

标签: regex

这是代理的正则表达式,如果我将其添加到代理中:

(.*\.|)(abc|google)\.(org|net)

我的代理将不会传输abc.orgabc.netgoogle.orggoogle.net的流量。

如何编写与此正则表达式相反的正则表达式?我的意思是只传输abc.orgabc.netgoogle.orggoogle.net的流量。


EDIT-01

我的想法只是想传播abc.orgwww.abc.org,我该怎么办?

3 个答案:

答案 0 :(得分:1)

尝试一下:

^(?!(www\.)?(?:abc|google)\.(?:net|org)).*

演示:https://regex101.com/r/WOnFx8/3/

我使用?!来反转您的正则表达式的匹配。这样,它将匹配除这四个特定域以外的任何域。

另一种方法是使用此代码在所需域之前包含所有内容:

^(?!(.*\.|)(?:abc|google)\.(?:net|org)).*

演示:https://regex101.com/r/WOnFx8/4/

答案 1 :(得分:1)

您编写的正则表达式

  

(。* \。|)(abc | google)\。(org | net)

表示任何字符串都是abc.org,gooogle.org,abc.net,google.net中的一个,其可选的前缀字符串以点(。)结尾。 就像:test.google.org,sub.abc.net,...

我认为您想匹配test.yahoo.com之类的字符串,而不是test.google.org。如果您可以使用负面的前瞻性,那就是答案:

  

^ (。* \。|)(?!(abc | google)\。(org | net))\ w + \。\ w + $

说明:

  • ^ $ ,以确保您的匹配项是整个网址字符串
  • 否定前瞻性是检查url是否类似于abc.org,abc.net,google.org,google.net
  • 然后 \ w + \。\ w + 来检查其余字符串是否属于URL类型(例如yahoo.com等)

答案 2 :(得分:0)

我将假设您已经提前,如果可以的话,您可以简单地使用-

(^.*?\.(?!(abc|google))\w+\.(?:org|net)$)

演示-https://regex101.com/r/5eC41R/3

这是-

  1. 寻找网址的开头(直到第一个.
  2. 检查下一部分是否不是abcgoogle
  3. 寻找下一部分(直到下一个.
  4. 正在寻找结束orgnet

请注意,由于它是先行方式,因此与其他正则表达式匹配项相比,它会变慢