2012-11-06 6 views
0

정규식을 사용하여 앵커 태그 안에 중첩되지 않은 이미지를 어떻게 일치시킬 수 있습니까? 여기 정규식을 사용하여 앵커 태그에 중첩되지 않은 이미지 태그 일치

내가 원하는 무엇인가 :

일치 :<a href="index.html"><img src="images/default.jpg" /></a>

경기 :<div><img src="images/default.jpg" /></div>

경기 : <img src="images/default.jpg" />

내가 정규식에서 좋은이야 없지만, 이것이 내가 지금까지 생각한 것인데, 효과가 없다. PHP는 특정되고 싶어하기 때문에

[^<a[^>]*>]<img.*?/>[^</a>]

나는 lookarounds를 사용할 수 없습니다. 당신의 어려움 뒤에 이유의 대부분

답변

2

는 단순히 그 HTML이 정규 언어가 아닙니다, 참조 : Coding Horror: Parsing Html the Cthulhu Way

는 쿼리 식 처리 할만큼 강력한 언어 (X) HTML을 사용하거나에 프로그래밍 방식으로 DOM을 사용하는 것을 고려 모든 이미지 태그를 가져온 다음 조상이 <a> 인 이미지 태그를 제외하십시오. HTML 콘텐츠

<img src="images/inside_div.jpg"/> 
<img src="images/inside_nothing.jpg"/> 
+0

:

$generated_string = '<a href="index.html"><img src="images/inside_a.jpg" /></a>' . '<div><img src="images/inside_div.jpg" /></div>' . '<img src="images/inside_nothing.jpg" />'; $doc = new DOMDocument(); $doc->loadHTML($generated_string); $xpath = new DOMXpath($doc); $elements = $xpath->query("//*[not(self::a)]/img"); foreach ($elements as $element){ echo $doc->saveXML($element) . "\n"; } 

이 코드는 출력을 줄 것이다 : PHP5에서

, 나는대로 간단하게 것을 사용하여, 당신은 DOMXPath를 사용할 수 있다고 생각합니다 생성 된 문자열에서 파생 된 것이 아닙니다. – user1105430

+0

문제가되지 않는다면,이 경우''$ doc-> loadHTML ($ generated_string)''을 사용하십시오. –

+0

HTML 파일 대신 문자열에서 작동하는 예제가 업데이트되었습니다. –

관련 문제