【问题标题】:Excluding specific values from pattern match [duplicate]从模式匹配中排除特定值[重复]
【发布时间】:2020-04-07 19:46:14
【问题描述】:

以下正则表达式捕获 IP 地址以及 DNS 主机名。 我想要添加一些要忽略的 IP,例如 1.0.0.0 和 0.0.0.0。我尝试了一些消极的前瞻,但没有成功。

[\w-]+(\.[\w-]+)+

例如:

www.google.com 255.255.255.255 1.0.0.0 *.com 0.0.0.0

应该匹配该行中 5 个中的 3 个

任何提示都会很棒。

编辑:我试过这个,这有点工作,但也过滤掉了其他值,例如 1.1.1.1

(?![1\.0\.0\.0]|[0\.0\.0\.0])[\w-]+(\.[\w-]+)+

【问题讨论】:

  • 应该将 IP 地址与主机名分开。
  • 感谢@CAustin。我也看看这个!

标签: regex


【解决方案1】:

在忽略 IP 的 1.0.0.00.0.0.0
的情况下查找 IP 和域 验证 ov Ipv4 和 domain 至少包含一个字母,全部包裹在里面
空白边界是 thisr:

(?<!\S)(?!0{0,2}[01](?:\.0{1,3}){3})(?:(?:0{0,2}\d|0?[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:0{0,2}\d|0?[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3}|(?=\S*[a-zA-Z])[\w-]+(?:\.[\w-]+)+)(?!\S)

https://regex101.com/r/ZPQS5K/1

展开

 (?<! \S )
 (?!                           # Not  0.0.0.0  or  1.0.0.0
      0{0,2} [01] 
      (?: \. 0{1,3} ){3}
 )
 (?:
      (?:                           # IP address
           0{0,2} \d 
        |  0? [1-9] \d 
        |  1 \d{2} 
        |  2 [0-4] \d 
        |  25 [0-5] 
      )
      (?:
           \. 
           (?:
                0{0,2} \d 
             |  0? [1-9] \d 
             |  1 \d{2} 
             |  2 [0-4] \d 
             |  25 [0-5] 
           )
      ){3}

   |                              # or 
      (?= \S* [a-zA-Z] )            # At least a letter
      [\w-]+                        # Domain
      (?: \. [\w-]+ )+
 )
 (?! \S )

【讨论】:

  • 哇。这很让人佩服。我很感激,我将不得不进一步研究它以深入了解它。谢谢!