2008-11-13 5 views
4

두 태그 사이의 모든 것을 어떻게 일치시킬 수 있습니까?두 태그 사이의 모든 것을 정규식과 일치 시킵니까?

나는이 같은 시도! (. *)!

<을 - - \의 * LoginStart \의 * > < - \의 * LoginEnd \의 * - >

그러나 그것은 나를 위해 너무 잘 작동하지 않았다 ..

나는 정규 표현에 가지 새로운 해요 이온, 그래서 만약 누군가가 친절하게도 내가 어떻게 이것을 성취 할 수 있는지를 설명하기를 희망했다.

감사합니다.

답변

12
$string = '<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->'; 
$regex = '#<!--\s*LoginStart\s*-->(.*?)<!--\s*LoginEnds\s*-->#s'; 

preg_match($regex, $string, $matches); 

print_r($matches); // $matches[1] = <div id="stuff">text</div> 

설명은 :

(.*?) = non greedy match (match the first <!-- LoginEnds --> it finds 
    s = modifier in $regex (end of the variable) allows multiline matches 
     such as '<!-- LoginStart -->stuff 
       more stuff 
       <!-- LoginEnds -->' 
1

PHP와 정규식? 여기에 몇 가지 제안 사항입니다 :

'/<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->/Us' 

가 더 좋을 수도 - U 대문자는이 작동 처음 <!--에서 중단됩니다 즉, 정규식이 아닌 욕심을합니다. 그러나 중요한 것은 s이며, 줄 바꿈 문자를 . 문자와 대조하도록 정규식에 알립니다.

대문자 사용법에 따라 i을 끝에 추가하면 대/소문자를 구분하지 않습니다.

+0

더 이상 성가 시게 할 수 있습니까? –

0

나는 오웬의 답변을 시도했지만 그것은

<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->"DONT MIND THIS"<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->

이 라인 "DONT 마음 THIS"또한, 즉이 포함되어 같은 조건 실패 <의 모든 내용을 포함합니다. - LoginStart - > 및 마지막으로 <! - LoginEnds - > 태그

관련 문제