Я следующий текст сохранить в виде файла и пытается сделать регулярное выражениенулевой ширины отрицательный взгляд вперед утверждение Perl
line1 brown fox
line2 black owl
line3 red dear
Когда я пытаюсь выполнить следующую PERL команды,
perl -ne 'print if /(line.*)(?!.*fox)/' text.txt
это печать все три строки (вместо печати строк2 и строки3).
Как это соответствует первой строке? я получить ожидаемые результаты, если я использую следующую PERL Заявления о
perl -ne 'print if /(line)(?!.*fox)/' text.txt
Благодаря
Ok если линия *. потребляет всю строку, прежде чем lookahead даже попытается, то почему следующий оператор возвращает правильный результат perl -ne 'print if /(line.*)(?=.*fox)/' text.txt .... когда это утверждение Я получаю только строку1. – user2896215
Поскольку механизм регулярных выражений найдет способ совпадения, если он есть. Ваша первоначальная попытка исключает одно возможное совпадение, но движок просто находит другое. Напротив, это решение находит совпадение в отрицательном представлении, если оно есть. – tripleee
@hwnd: (строка. *), Соответствующая всем трем строкам, и обрабатывает каждую строку как целую цепочку, но если я заменяю отрицательный результат с положительным, то не дает ожидаемого результата .... так что если я использую следующий скрипт perl -ne 'print if /(line.*)(?!.*fox)/; печать «$ 1 \ П»»test3.txt line1 коричневая лиса line1 коричневая лиса строка2 черная сова строка2 черная сова line3 красный дорогой line3 красный дорогой затем печати первой группы ($ 1) показывает, что вся линия подобрана (line. *), как видно из выходов. – user2896215