preg_match_all поиск в подшаблоне

MagicGTS

Новичок
preg_match_all поиск в подшаблоне

Помогите с регулярками, что-то уже не выходит ничего путного.
Задача такая, есть некий текст уложенный в теги <p>...</p> (вложенности тегов <p> нет, но внутри этих тегов могут попадать и другие теги, содержимое которых также нужно вытащить), нужно выбрать весь текст из этих тегов, и в нем найти слова длинной более 3-х символов и содержащие буквенную последовательность "нат" (как пример).
Вариант, поиска содержимого тегов <p>...</p>, а потом в цикле раздирания каждого найденного набора не очень хорош, жрет много ресурсов (хоть он у меня и получился, всежтаки примитив). А вот сделать это одной регуляркой не получается (ну на крайняк двумя, а хочется, должно быть экономичнее и быстрее).

Сейчас работает так:
PHP:
//вытаскиваем содержимое тегов (пока не рассматриваю вариант с вложенными тегами)
preg_match_all("/<p>(.*)<\/p>/",$doc, $tmp1);

//в цикле выбираю данные из $tmp1 и обрабатываю таким макаром:
preg_match_all("/(\w+)/", $tmp1_value[0], $tmp2);

//а теперь ещё один цикл, на разбор по критерию!!!! ):
preg_match_all("/нат/i", $tmp2_value[0],$hword)
Решение в лоб не нравится, а по "умному" не догоняю :(
 

Sepuka

Новичок
Re: preg_match_all поиск в подшаблоне

PHP:
$str = 'Помогите с регулярками, что-то уже не выходит ничего путного.  Задача такая, есть некий текст уложенный в теги <p>...</p> 
(вложенности тегов <p> нет,   но внутри этих тегов могут попадать и другие теги, содержимое которых также нужно вытащить),   нужно <p>тут 
нат0</p>текст из этих тегов, и в нем найти слова длинной более 3-х символов и   содержащие буквенную последовательность "нат" (как пример).
  Вариант, поиска содержимого тегов <p>...</p>, а потом в цикле раздирания каждого найденного   набора не очень <p>и тут нат1 </p>хорош, 
жрет много ресурсов (хоть он у меня и получился, всежтаки примитив).   А вот сделать это одной регуляркой не получается (ну на крайняк двумя, 
а хочется, должно быть экономичнее и быстрее).';  
preg_match_all('#<p> (?:.*?) нат (?:.*?) <\/p>#ix', $str, $matches);  
print_r($matches[0]);
у меня результат
PHP:
Array  (      
[0] => <p>тут нат0</p>      
[1] => <p>и тут нат1 </p>  
)
 

MagicGTS

Новичок
Ого! Спасибо! Попробую применить в своей задаче, если будут вопросы напишу!
 
Сверху