我想否定这个匹配 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