정규 표현식과 두 개의 태그 사이의 모든 것을 일치시겠습니까?

StackOverflow https://stackoverflow.com/questions/287991

  •  08-07-2019
  •  | 
  •  

문제

두 태그 사이의 모든 것을 (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 --> 꼬리표

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top