Я не считаю себя 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?
Я не думаю, что я далек от решения, но почему-то я просто не могу его найти. Что-то определенно отсутствует.
Спасибо за ваше время.
Это должно дать вам то, что вы ищете, и обеспечить некоторую гибкость, если вы хотите немного изменить ситуацию:
$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
соответственно.