2010-07-06 2 views
2

이 문제를 해결하기 위해 정규식에 시간을 보냈지 만 결과가 없습니다 PHP 5.3을 사용하여이 문제를 해결해보십시오 정보 - 페이지에서 반복되는 횟수와 페이지의 모든 태그에 대한 정보.페이지의 모든 HTML 태그를 카운트 PHP

+0

시도한 내용을 게시하십시오. dom 요소의 수를 원한다면 자바 스크립트에서 더 나은 결과를 얻을 수 있지만 php는 libxml을 사용하여이를 수행 할 수 있습니다. 유효한 xhtml이라고 가정합니다. – Gabriel

+1

PHP에서 작성하는 경우 [DOMDocument class] (http://php.net/manual/en/class.domdocument.php)를 사용해야합니다. Gordon의 대답은 여기를 참조하십시오 : [str_replace 특정 HTML 태그 내에서만] (http://stackoverflow.com/questions/3172493/str-replace-within-certain-html-tags-only) – Mike

+0

나는 reg exp를 사용하여이 문제를 좋아한다. substr 논리는 다음이었다 모든 페이지가 1 개의 긴 문자열로 변환 HTML 태그를 찾아서 모두 제거한 후 모두를 제거한 후 다음을 계산하십시오. – Alexandr

답변

17

체크 아웃 좋습니다. 업데이트하고보다 구체적으로 작성하십시오. 이 페이지의 모든 HTML 태그를 계산 하려는 경우, 당신은 할 수 있습니다 :

$HTML = <<< HTML 
<html> 
    <head> 
     <title>Some Text</title> 
    </head> 
    <body> 
     <p>Hello World<br/> 
      <img src="earth.jpg" alt="picture of earth from space"/> 
     <p> 
     <p>Counting Elements is easy with DOM</p> 
    </body> 
</html> 
HTML; 

를 DOM 모든 DOMElements 계산 :

$dom = new DOMDocument; 
$dom->loadHTML($HTML); 
$allElements = $dom->getElementsByTagName('*'); 
echo $allElements->length; 

위가 출력 8을, 여덟 개 요소가 있기 때문에 DOM. 당신은 또한 에게 요소의 분포를 알 필요가 있다면, 당신은 getElementsByTagName은 DOMElements 만 반환

$elementDistribution = array(); 
foreach($allElements as $element) { 
    if(array_key_exists($element->tagName, $elementDistribution)) { 
     $elementDistribution[$element->tagName] += 1; 
    } else { 
     $elementDistribution[$element->tagName] = 1; 
    } 
} 
print_r($elementDistribution); 

Array (
    [html] => 1 
    [head] => 1 
    [title] => 1 
    [body] => 1 
    [p] => 2 
    [br] => 1 
    [img] => 1 
) 

주를 반환 할 수 있습니다. 태그를 닫는 것을 고려하지 않으며 다른 DOMNode도 반환하지 않습니다. 종료 태그 및 기타 노드 유형도 계산해야하는 경우 XMLReader을 대신 사용해보십시오.

1
$testHTML = file_get_contents('index.html'); 

$search = preg_match_all('/<([^\/!][a-z1-9]*)/i',$testHTML,$matches); 

echo '<pre>'; 
var_dump($matches[1]); 
echo '</pre>'; 

모든 태그의 배열을 제공합니다. 데이터가 배열에 있으면 모든 표준 PHP 배열 함수를 사용할 수 있습니다. array_count_values ​​() - 당신이 정말로 당신이으로, preg_match_all의 결과()와 html 태그 array_count_values를 사용

()에 대해 원하는 정보가 무엇인지 말을하지 않는하지만 ... 당신이 원하는 정보를 추출하기 :

echo '<pre>'; 
var_dump(array_count_values($matches[1])); 
echo '</pre>'; 

array(5) { 
    ["html"]=> 
    int(1) 
    ["head"]=> 
    int(1) 
    ["title"]=> 
    int(1) 
    ["body"]=> 
    int(1) 
    ["h1"]=> 
    int(2) 
} 

이 당신이 원하는 무엇을 주는가?

+0

div-5a-7과 같은 정보가 필요합니다. p - 22 Maby DOMDocument가이 작업에 가장 적합하지 않습니까? – Alexandr

+0

예 대단히 고맙습니다. 오랫동안 괴롭혔습니다. 위대한 답변 대단히 감사합니다. – Alexandr

관련 문제