Регулярные выражения. Выбор строк из подмаски? Ссылки на подмаски?

bw_left

Новичок
Регулярные выражения. Выбор строк из подмаски? Ссылки на подмаски?

долго, долго разбирался, решил задачу частично и ... зашел в ступор:

есть такой набор символов

бла бла бла <h4>"Очень важный заголовок", но надо бы убрать кавычки</h4>бла бла бла
куча мусора,куча мусора,куча мусора,куча мусора,
куча мусора<td>фирма Рога И Копыта</td>куча мусора,
куча мусора<td>ООО Копыта и Рога</td>куча мусора,
куча мусора<td>Рога без Копыт Фирма</td>куча мусора,
куча мусора<td>фирма Рогатые Копыта ООО</td>куча мусора,
куча мусора<td>Скопытившиеся Рога</td>куча мусора,
и дальше снова бла бал блаблабла

надо выбрать названия фирм, откинув часть текста: в частности - фирма, ООО (и возможно еще что-то). Т.е. сдлать выборку в выборке.

выборка самих строк у меня получилась такая:
(?<=<h4>|<td>)(.*)(?=<\/h4>|<\/td>)

выборка отдельных слов ИСКЛЮЧАЮЩИХ ненужные такая:
\b(?:(?!фирма|ООО)\w)+\b

вот надо эти две конструкции вместе соединить, чтобы можно было выборку делать в одну строку.

Циклы и IF-ы не предлагать. preg_replace тоже - нужно в одну строку (задача шефом поставленна именно такая) ... если это вообще возможно


И второй вопрос: не могу уловить логики использования "Ссылок на Подмаски" в функции preg_match_all
 

bw_left

Новичок
получилось что-то вроде

/(?<=<h4>|<td>).*?(\b(?:(?!фирма|ООО)\w)+\b).*?(?=<\/h4>|<\/td>)/is

кроме всего прочего, выбирается только первое попадание (ладно бы если все слова попадали), а нужна выборка всей строки .... что-то мне подсказывает, что надо вот это: (?is) куда-нить прикрутить, но если честно толком не понимаю куда и надо ли вообще
 
Сверху