2010-03-17 2 views
0

J'ai un problème avec les expressions régulières! Comment puis-je compter les tags html avec regex?Comment compter les balises html et le contenu

+0

Vous plaisantez, n'est-ce pas? Si non, non, vous ne pouvez pas et vous ne devriez pas. Lire http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Amarghosh

+3

Il suffit de compter le nombre de '<' - cela vous donnera le même type de précision que vous pouvez obtenir avec une regex. –

+0

Aussi, même si vous êtes prêt à faire face aux problèmes d'utilisation, regex ne compte pas. Au minimum, vous devez utiliser, par exemple, perl pour charger le html dans une variable et faire un split() sur "<" (à l'exclusion de " Timo

Répondre

2

Ne pas utiliser regexp utiliser le DOM. Je ne suis pas sûr comment vous le feriez mais il sera presque certainement plus facile avec le DOM: http://php.net/manual/en/book.dom.php

+0

Merci. La classe DomDocument est bonne, et résout mon problème, mais j'ai une dernière question. J'ai des métabalises: J'ai besoin du nom - (mots-clés) et le contenu - (quelque chose de tout). Comment puis-je obtenir le nom et le contenu avec la classe DomDocument? – turbod

+0

$ meta = $ dom-> getElementsByTagName ('meta'); for ($ i = 0; i longueur < $meta-> $; $ i ++) {echo méta- $> item ($ i) -> getAttribute ('name') "-" $ méta-> item ($ i..) -> getAttribute ('content'). "
"; } – turbod

1

Les expressions régulières ne sont pas conçues pour faire cela. Il y a une meilleure solution à votre problème, vérifiez simplement les autres réponses.

Si vous avez besoin juste cette fois, comme un hack rapide et sale, et ne se soucient pas de cas de bord (comme échappé balises utilisés dans les chaînes), vous pouvez utiliser "<\w+" pour faire correspondre les balises de départ, et compter le nombre de matches .

Mais vous ne devriez pas le faire de cette façon. =)

1
$data=file_get_contents("file"); 
$data=preg_replace("/\n+|[[:blank:]]+/","",$data); 
print "number of tags: ". substr_count($data, '<'); 
Questions connexes