중첩 된 HTML 태그에 대한 preg_match
-
07-07-2019 - |
문제
PHP를 통해 모든 "dev"태그와 각각의 콘텐츠를 포착하고 싶습니다. preg_match_all()
그러나 중첩 된 것을 얻을 수 없습니다.
데이터:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
지금까지 내 표현 :
|<dev>(.*)</dev>|Uis
도움을 주셔서 감사합니다. b.
해결책
구문 분석을 위해 정기적 인 표현을 사용하지 마십시오. 실제 파서와 같은 것을 사용하십시오 domdocument 또는 단순 렉스:
$xml = simplexml_load_string('<root>'.$str.'</root>');
다른 팁
재귀 적 일치 패턴이 필요합니다.
/<dev>(.*|(?R))<\/dev>/i
그것은 단지 중첩 된 요소를 빨아 들일 것이므로, 당신이 그것들을 구문 분석하고 싶다면, 당신은 $ matches에서 다시 함수를 실행해야합니다 [1
그만큼 *
탐욕스러운 운영자이며 가능한 많은 캐릭터를 소비합니다. 당신은 사용해야합니다 *?
대신 가장 작은 경기를 찾기위한 비가비 버전. 아마도 Regexes가이를 수행하기에 가장 좋은 도구가 아닐 수도 있습니다.
제휴하지 않습니다 StackOverflow