Regex - захватить определенное слово в определенных тегах - PullRequest
2 голосов
/ 26 июля 2010

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

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

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

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

Что у меня так далеко:

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

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

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

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

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

1 Ответ

2 голосов
/ 26 июля 2010

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

$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 соответственно.

...