2013-01-06 2 views
-2

저는 PHP를 처음 사용하고 PHP로 작성된 CMS의 특정 파일을 약간 수정했습니다. 페이지 소스에서 첫 번째 <img> 태그를 취한 함수를 수정하여 해당 소스에서 임의의 태그를 가져 왔습니다. 소스를 일치시키는 데 사용되는특정 src를 제외한 모든 img 태그와 일치하는 PHP 정규식

정규식은 다음과 같습니다

$tag 그냥 문자열 img을 포함
$regex = '/<' . $tag . '\\b[^>]*>/i'; 

.

그러나 원본에서 src 특성에 "1px.gif"가 들어있는 이미지가 있고이를 일치시키지 않는 것으로 나타났습니다.

현재 1px.gif가 아닌 한 무작위 요소를 배열 배열에서 다시 선택합니다.하지만 물론 나쁜 해결책입니다.

나는 이걸 독자적으로 할 수는 없지만 위의 정규 표현식을 <img>이 아닌 단어로 검색한다는 것을 이해합니다. 추가해야하고 '1px.gif'이 (가) 포함되어 있지 않습니다.

선택적으로 일치하는 배열을 검사하고 1px.gif 인 모든 항목을 제거 할 수 있지만 여전히 정규식을 선호합니다.

+0

http://stackoverflow.com/questions/3577641/how-to-parse-and-process-html-xml-with-php/3577662#3577662 –

+0

당신의 몇 가지 예를 줄 수 당신은 무엇을 매치시키고 싶습니까? –

+0

@MikeB 정규 표현식이이 목적을 위해 낙심한다는 것은 알고 있지만 웹 서버에 Simple HTML DOM Parser와 같은 PHP 확장을 설치할 수 없다. 왜냐하면 내가 사용하고있는 CMS로 그 작업을하는 법을 모르기 때문이다. – MarioDS

답변

8

일부 깨진 솔루션 (정규식은 HTML을 구문 분석 할 수 없음) 대신 DOMDocument를 사용하여 필요한 데이터를 가져와야합니다. 이것의 예는 다음과 같습니다

<?php 
$html = '<p>something</p><img src="something"><img src="yay"><img src="1px.gif">'; 

$doc = new DOMDocument(); 
libxml_use_internal_errors(true); 
$doc->loadHTML($html); 

$xpath = new DOMXPath($doc); 
$nodes = $xpath->query('//img[not(contains(@src, "1px.gif"))]'); 

foreach ($nodes as $node) { 
    echo $node->getAttribute('src'); 
} 

이것은 src1px.gif의이없는 모든 이미지를 얻을 것이다. 거기에서 무작위 노드를 얻는 것이 꽤 쉬울 것입니다.

데모 : http://codepad.viper-7.com/UdEiM4

+0

나 같은 PHP 놈이 이해할 수있는 건설적인 답변에 감사드립니다. 처음부터 전체 페이지 소스를 가지고 있었지만 DOMDocument 객체로 변환하는 방법을 몰랐다. 이제는 그렇게했다. – MarioDS

+0

API는 일단 알게되면 매우 간단합니다. xpath 쿼리는 익숙해지기까지 다소 시간이 걸릴 수 있지만, 일단 알게되면 매우 강력하고 유용합니다. – PeeHaa

관련 문제