Я написал Regex, используя pcregrep, и все вело себя так, как ожидалось, пока я не добавил положительный прогноз.
Сценарий:
У меня есть следующий текстовый файл:
a
b
c
a
c
Цель:
Я хочу использовать Regex с pcregrep, чтобы вернуть строку, содержащую a
, и строку, содержащую c
, и строку, содержащую b
, между которыми не перехвачено. Таким образом, он будет захватывать первые три строки (a
, b
, c
) и возвращать первую (a
) и третью (c
) строку. не захватывает четвертую и пятую строки, потому что между ними нет строки b
. Таким образом, результат будет:
a
c
Что я пробовал
Если я запускаю pcregrep -M 'a\nb\nc\n'
( команда 1 ), это захватывает и возвращает:
a
b
c
как и ожидалось. Итак, теперь я хочу изменить это, чтобы захватить строку b
с положительным прогнозом. Я попробовал это: pcregrep -M 'a\n(?=(b\n))c\n'
( команда 2 ). Однако это ничего не возвращает.
Мой вопрос:
Почему команда 2 не возвращает ожидаемый результат, тогда как команда 1 делает? Как я могу вернуть желаемый результат? Я знаю, что есть и другие способы, кроме pcregrep
, но учтите, что я хочу использовать pcregrep
, потому что буду расширять функциональность для решения подобных проблем.
Спасибо!