정규 표현식과 두 개의 태그 사이의 모든 것을 일치시겠습니까?
문제
두 태그 사이의 모든 것을 (PCRE) 어떻게 일치시킬 수 있습니까?
나는 다음과 같은 것을 시도했다 :
u003C!--s*LoginStarts*-->(.*)u003C!--s*LoginEnds*-->
하지만 그것은 나에게 너무 잘 작동하지 않았습니다 ..
나는 정규 표현에 익숙하지 않기 때문에 누군가가 정기적 인 표현으로 가능하다면 누군가가 이것을 어떻게 달성 할 것인지 설명하기에 충분히 친절하다면 기대하고있었습니다.
감사
해결책
$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 -->'
다른 팁
PHP와 Regex? 다음은 몇 가지 제안입니다.
'/<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->/Us'
더 좋을 수도 있습니다 U
자본화 된 Regex를 비 게리로 만듭니다. <!--
작동 할 수 있습니다. 그러나 중요한 것은입니다 s
, Regex에게 Newline과 일치하도록 지시합니다. .
캐릭터.
자본화에 얼마나 확실한 지에 따라 i
결국 REGEX 검색 사례를 감수성으로 만듭니다.
나는 Owen의 대답을 시도했지만 그런 조건에 실패합니다.
<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->"이것을 신경 쓰지 마세요"<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->
여기에는 "이 this this"라인도 포함됩니다. 즉, 첫 번째 내용을 다룹니다.u003C!-- LoginStart --> 그리고 마침내u003C!-- LoginEnds --> 꼬리표
제휴하지 않습니다 StackOverflow