2010-07-26 2 views
2

나는 자신을 PHP "멍청이"라고 생각하지 않지만 정규 표현식은 여전히 ​​나에게 새롭다.Regex - 특정 태그 내에서 특정 단어 잡기

나는 댓글 목록을받는 곳의 CURL을하고 있습니다. 내가 원하는 것은 간단하다

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

: 모든 주석이 HTML 구조가 내가 싶어를하는으로, preg_match_all에서,이 특정 DIV 태그의 단어 "쿨"이 코멘트. 내가 지금까지 무엇을 가지고

: 슬프게도

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

하지 작업을 수행합니다. 그러나 REGEX가 단순히 #\bcool\b#Uis이면 작동 할 것입니다. 그러나 나는 정말로 그 태그들에 "cool"이라는 단어를 붙잡고 싶습니다.

2 개의 정규 표현식을 사용할 수 있다는 것을 알고 있습니다. 하나는 모든 주석을 가져오고, 다른 하나는 "cool"이라는 단어를 캡처하기 위해 필터를 적용합니다.)하지만 어떻게 하나의 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

(편집 됨 : preg_match_all에 "_all"이 표시되지 않았습니다.) 정규 표현식에 마침표가 없으므로 s 수정 자 (단일 행 모드)가 필요하지 않습니다. – Tim

+0

@Tim : s 수정자는 여러 행에 걸쳐있는 html 블록이 입력에 포함 된 경우를위한 것입니다. OP 또는 나 자신이 지정한 입력에 대해서는 이것이 필요하지 않지만 다른 경우가있을 수 있습니다. –

+0

예상대로 완벽하게 작동합니다. 답변을 주셔서 감사합니다. 미안하지만 일찍 응답하지 않으면 잠자리에 들기 전에 약 1 시간 전에 게시했습니다. 다시 고마워. – Justin01

관련 문제