2010-07-26 5 views
2

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

Я делаю 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, он будет работать. Но я действительно хочу записать слово «cool» в этих тегах.

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

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

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

ответ

2

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

$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> с, который соответствовал будет $matches[0] и массив текста, который соответствовал будет $matches[1]

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

+0

(Отредактировано: не было "_all" для preg_match_all) ... Вам также не нужен модификатор s (режим одиночной строки), потому что в регулярном выражении не существует периодов. – Tim

+0

@Tim: Модификатор s был на всякий случай, когда на входе содержался блок html, который охватывал несколько строк. Для ввода, указанного OP или мной, это не требуется, но могут быть и другие случаи, в которых это было бы. –

+0

Как и было предсказано, он отлично работает. Спасибо миллион за ваш ответ и извините, если я не ответил раньше, я отправил это около часа, прежде чем ложиться спать. Еще раз спасибо. – Justin01

Смежные вопросы