Я хотел бы отменить это регулярное выражение, которое соответствует, если IP-адрес 1.2.3.4, а затем «myhost», но я хочу, чтобы оно совпадало, если IP-адрес не 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

идея состоит в том, чтобы проверить некоторые файлы /etc /hosts и убедиться, что ip совпадает с именем хоста и наоборот. Я буду делать это в ansible .. так что, если регулярное выражение может быть объединено в одну строку ..
Короче говоря, я хочу проверить, что всегда правильно. Я использую ANSIBLE факт, чтобы найти IP и имя хоста .. У меня просто проблема с регулярными выражениями.

редактировать: как просили несколько примеров:

у меня есть следующие 4 строки:

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) оба должны совпадать.

Если какое-либо из регулярных выражений совпадает, оно будет заменено на ansible с помощью строки (1), чтобы убедиться в правильности /etc /host. не имеет опечаток или несоответствий.

благодарю вас.

1 ответ1

0

Lookarounds - это утверждение нулевой длины, вы должны добавить регулярное выражение, соответствующее IP:

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

Это будет соответствовать IP-адресу, за которым следует hostname , которое не равно 1.2.3.4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .