Вопрос по регулярному выражению

WebByte

Проходящий мимо
Вопрос по регулярному выражению

Задача:
Найти в тексте все подстроки, начинающиеся на <em>, заканчивающиеся на </td>.
Причем между <em> и </td> не должно быть тега </em>

Хожу полдня вокруг <em>(?!</em>)</td> но так ничего путнего не получается...
 

whirlwind

TDD infected, paranoid
можно конечно подобрать такой регэксп, но работать он будет оччень медленно. Разбей на две подзадачи: сначала найди <em>(.*?)</td> и с момощью preg_replace_callback проверь нет ли внутри </em>. если нет, то сохраняй.
 

WebByte

Проходящий мимо
Это решение мне в голову пришло сразу же.
Тривиально и неинтересно :)
А вот можно ли это сделать одним регулярным?
 

SelenIT

IT-лунатик :)
Можно.
PHP:
~<em>(.(?!</em>))*?</td>~si
Пробел не нужен (форум добавил).
 

WebByte

Проходящий мимо
Значит, в правильном направлении думал.
Спасибо, буду тестировать...
 
Сверху