将几个正则表达式与正向和负向预测结合起来

将几个正则表达式与正向和负向预测结合起来

我想否定这个匹配 ip 为 1.2.3.4 的正则表达式后面跟着“myhost”,但我希望它匹配的是不是1.2.3.4 但其后跟 myhost

^(1\.2\.3\.4) (?=myhost)

我尝试这样做,但没有效果。

^(?!(1\.2\.3\.4)) (?=hostname)

我还想否定这个与主机名匹配的正则表达式,但如果主机名不是“myhost”,我想匹配

(?<=1\.2\.3\.4) (myhost)

如果 myhost 前面有 1.2.3.4,则正则表达式与 myhost 匹配

这个想法是检查一些 /etc/hosts 文件并确保 ip 与主机名匹配,反之亦然。我将在 ansible 中执行此操作。因此,如果正则表达式可以合并在一行中。
简而言之,我想测试它们是否始终正确。我正在使用 ansible fact 来查找 ip 和主机名。我只是遇到了正则表达式的问题。

编辑:按要求举一些例子:

我有以下四行:

1.2.3.4 hostname (1)
1.2.3.5 hostname (2)
1.2.3.4 otherhost (3)
1.2.3.5 otherhost (4)

第 (1) 行不应匹配任何内容。第 (2) 行应匹配 IP 地址,但后面不应有空格。第 (3) 行otherhost应匹配。第 (4) 行应匹配两者。

如果任何正则表达式匹配,它将被替换为行 (1) 的 ansible,这是为了确保 /etc/host 是正确的。没有拼写错误或不一致。

谢谢。

答案1

环视是零长度断言,您必须添加与 IP 匹配的正则表达式:

^(?!1\.2\.3\.4)\d+(?:\.\d+){3} (?=hostname)

这将匹配 IP 地址,后跟hostname不等于1.2.3.4

相关内容