REGEX 문제 - 주어진 클래스로 태그의 내용을 검색 - preg_match (_all)
-
16-09-2019 - |
문제
내용을 검색해야합니다 <p>
주어진 클래스로 태그. 수업이 될 수 있습니다 simplecomment
또는 comment
...
그래서 나는 다음 코드를 썼습니다
preg_match("|(<p class=\"(simple)?comment(.*)?\">)(.*)<\/p>|ism", $fcon, $desc);
불행히도, 그것은 아무것도 반환하지 않습니다. 그러나 태그 엔딩 부분을 제거하면 (<\/p>
) 어떻게 든 작동하여 너무 긴 문자열을 보호합니다 (태그 시작부터 문서 끝까지) ...
내 정규 표현에 어떤 문제가 있습니까?
해결책
DOM 파서처럼 사용해보십시오 http://simplehtmldom.sourceforge.net/
SimpleHtmdom의 홈페이지에서 예제 코드를 올바르게 읽으면 다음과 같은 작업을 수행 할 수 있습니다.
$html->find('div.simplecomment', 0)->innertext = '';
다른 팁
여기서 빠른 수정은 다음과 같습니다.
'|(<p class="(simple)?comment[^"]*">)((?:[^<]+|(?!</p>).)*)</p>|is'
변경 :
- 구성
(.*)
정규 표현이 작동하는 것을 막는 모든 것을 맹목적으로 일치시킬 것이므로 인스턴스를 더 엄격한 일치로 완전히 대체했습니다.- ...
comment(.*)?
... - 이것은 기본적으로 전부 또는 전혀 일치합니다. 나는 이것을 대체했다[^"]*
그것은 0 이상과 일치하기 때문에"
문자 (기본적으로 마감과 일치합니다."
의 성격class
기인하다. - ...
>)(.*)<\/p>
... - 다시, 이것은 너무 많이 일치 할 것입니다. 나는 그것을 모든 비에 맞는 효율적인 패턴으로 대체했습니다.<
캐릭터, 그리고 일단 닿으면 a<
다음과 같은 지 확인합니다</p>
. 그것이 있다면, 그것은 일치를 중단 할 것입니다 (우리는 끝났기 때문에<p>
태그), 그렇지 않으면 계속됩니다.
- ...
- 나는 그것을 제거했다
m
이 정규 표현에 사용되지 않기 때문에 플래그.
하지만 신뢰할 수 없습니다 (상상해보십시오 <p class="comment">...<p>...</p></p>
; 일치합니다 <p class="comment">...<p>...</p>
).
신뢰할 수 있으려면 재귀적인 정규 표현식 또는 HTML 파서 (또는 XHTML 인 경우 XML)를 사용해야합니다. "올바르게"HTML을 처리 할 수있는 라이브러리도 있습니다. 브라우저처럼.)
제휴하지 않습니다 StackOverflow