Regex – захватить определенное слово в определенных тегах

Я не считаю себя PHP «noob», но регулярные выражения для меня все еще новы.

Я делаю CURL, где получаю список комментариев. Каждый комментарий имеет эту структуру HTML:

<div class="comment-text">the comment</div> 

Я хочу просто: я хочу получить из preg_match_all комментарии, которые содержат слово «cool» в этом конкретном теге DIV.

Что я до сих пор:

 preg_match_all("#<div class=\"comment-text\">\bcool\b</div>#Uis", $getcommentlist, $matchescomment); 

К сожалению, это не работает. Но если REGEX просто #\bcool\b#Uis , он будет работать. Но я действительно хочу записать слово «cool» в этих тегах.

Я знаю, что я мог бы сделать 2 регулярных выражения (один, который получает все комментарии, а другой, который фильтрует каждый из них, чтобы записать слово «круто»), но мне было интересно, как я могу сделать это в одном preg_match_all?

Я не думаю, что я далек от решения, но почему-то я просто не могу его найти. Что-то определенно отсутствует.

Спасибо за ваше время.

Related of "Regex – захватить определенное слово в определенных тегах"

Это должно дать вам то, что вы ищете, и обеспечить некоторую гибкость, если вы хотите немного изменить ситуацию:

 $input = '<div class="comment-text">the comment</div><div class="comment-text">cool</div><div class="comment-text">this one is cool too</div><div class="comment-text">ool</div>'; $class="comment-text"; $text="cool"; $pattern = '#<div class="'.$class.'">([^<]*'.$text.'[^<]*)</div>#s'; preg_match_all($pattern, $input, $matches); 

Очевидно, вам нужно указать свой ввод как значение для $input . После этого массив из <div> s, который соответствует, будет в $matches[0] а массив текста, который соответствует, будет в $matches[1]

Вы можете изменить класс div для соответствия или текст внутри div, который требуется, изменив значения $class и $text соответственно.