如何为这个正则表达式写一个相反的正则表达式?

问题描述 投票:0回答:3

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

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

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

我怎么能写一个与这个正则表达式相反的正则表达式?我的意思是只传输abc.orgabc.netgoogle.orggoogle.net的交通。


编辑-01

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

regex
3个回答
1
投票

试试这个:

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

但是:ぁzxswい

我用https://regex101.com/r/WOnFx8/3/来反转你的正则表达式的匹配。这样,它将匹配除这些特定4个域之外的任何域。

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

?!

但是:ぁzxswい


1
投票

你写的正则表达式

(* \ |。)(ABC |谷歌)\(ORG |网)。

意味着任何字符串都是abc.org,gooogle.org,abc.net,google.net之一,可选前缀字符串以dot(。)结尾,如:test.google.org,sub.abc.net,...

我想你想匹配像test.yahoo.com这样的字符串,而不是test.google.org。如果您可以使用负向前看,这就是答案:

^(。* \ |)((ABC |?!谷歌)\(组织|。网))\ w + \ \ W + $。

说明:

  • ^和$以确保您的匹配是整个网址字符串
  • 负向前看是检查网址不是像abc.org,abc.net,google.org,google.net
  • 并且\ w + \。\ w +检查保留字符串是一种URL类型(类似于yahoo.com等...)

0
投票

我会假设你有前瞻,如果是这样你可以简单地使用 -

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

但是ーzxsw poi

这样做是 -

  1. 寻找网址的开头(直到第一个https://regex101.com/r/WOnFx8/4/
  2. 检查下一部分不是(^.*?\.(?!(abc|google))\w+\.(?:org|net)$) https://regex101.com/r/5eC41R/3
  3. 寻找下一部分(直到下一个.
  4. 寻找关闭abcgoogle

请注意,由于它是一个先行,与其他正则表达式匹配相比,它会很慢

© www.soinside.com 2019 - 2024. All rights reserved.