Я потратил время на регулярное выражение, чтобы решить эту проблему, но не имел результата. Я пытаюсь решить эту проблему с помощью PHP 5.3. Информация, например: Сколько раз повторяется страница и информация обо всех тегах на странице.
Ваш вопрос, к сожалению, едва понятен в его нынешней форме. Попробуйте обновить его и уточнить. Если вы хотите считать все 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;
Подсчет всех DOMElements с DOM:
$dom = new DOMDocument; $dom->loadHTML($HTML); $allElements = $dom->getElementsByTagName('*'); echo $allElements->length;
Вышеуказанное выведет 8
, потому что в DOM имеется восемь элементов. Если вам также необходимо знать распределение элементов , вы можете сделать
$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 )
Обратите внимание, что getElementsByTagName возвращает только DOMElements . Он не учитывает закрывающие теги и не возвращает другие DOMNodes. Если вам также необходимо подсчитать закрывающие теги и другие типы узлов, вместо этого используйте XMLReader .
$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 () – для извлечения деталей, которые вы хотите … хотя вы действительно не говорите, какую информацию вы хотите использовать для html-тегов
Используя array_count_values () с результатами preg_match_all ():
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) }
Это то, что вы хотите?
Я предлагаю вам проверить simple html dom