Исключение элемента по регэкспу

Добрый день, по ходу копания одного парсера возник практический вопрос.

Вот регэксп: /<strong>\s*(?:<img.*?\/?>)?(.*)<\/strong>/

(?:<img.*?\/?>)- эта часть означает какое-либо изображение перед текстом. Оно может быть, его может не быть. Если изображение отсутствует текст парсится нормально. Но проблема в том, что если изображение есть, оно попадает не(?:<img.*?\/?>)сюда, а в блок с текстом (.*). Как можно исправиль данный регэксп?

Пример объекта парсинга

<strong><img src="http://www.site.de/images/stories/galleries/reviews/ololo.jpg" alt="ololo" style="margin: 10px; float: left;" height="100" width="100" /> Пока космические корабли бороздят просторы северного ледовитого океана...</strong>
  • Вопрос задан
  • 2520 просмотров
Решения вопроса 1
PaulZi
@PaulZi
В php всё вроде отрабатывает как надо:
Может дело во флагах, типа юникода (?u) или в переносе текста на новую строку (?m).

preg_match('/<strong>\s*(?:<img.*?\/?>)?(.*)<\/strong>/', $s, $mtch);

array(2) {
  [0]=>
  string(301) "<strong><img src="http://www.site.de/images/stories/galleries/reviews/ololo.jpg" alt="ololo" style="margin: 10px; float: left;" height="100" width="100" /> Пока космические корабли бороздят просторы северного ледовитого океана...</strong>"
  [1]=>
  string(137) " Пока космические корабли бороздят просторы северного ледовитого океана..."
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Глядите
rubular.com/r/PoWHYBdnL5
Ответ написан
Комментировать
kompi
@kompi
nullstack devoops
Скорее всего у вас проблемы в переносах строки, проставьте флаги /musi.
Уберить non-capturing group ?:, если вам нужно чтобы img попадал в отдельный результат.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы