К общем, есть блоки типа 123 Имя: Такое-то Фамилия: Сякая-то Возраст: такой-то 321 123 Имя: Такое-то Фамилия: Сякая-то Возраст: такой-то 321 123 Имя: Такое-то Фамилия: Сякая-то Отчество: Такое-то Возраст: такой-то 321 123 Имя: Такое-то Фамилия: Сякая-то Возраст: такой-то 321 Мне надо при помощи регулярки найти блоки, которые содержат отчество. Если регулярка будет выглядеть так: 123(.*?)Отчество.*?)321 То спарсит сразу 3 блока, 2 из которых не имеют отчества 123 Имя: Такое-то Фамилия: Сякая-то Возраст: такой-то 321 123 Имя: Такое-то Фамилия: Сякая-то Возраст: такой-то 321 123 Имя: Такое-то Фамилия: Сякая-то Отчество: Такое-то Возраст: такой-то 321 Можно как-то прописать регулярку, чтобы парсило исключительно блоки, содержащие параметр "отчество"?
PHP: preg_match_all('~^123(?:\r?\n(?:Отчество:.*()|[^\r\n]+))++\1~m', $text, $matches); http://rextester.com/PLY58426