2010-03-17 104 views
0

我遇到了正则表达式的问题! 我如何计算正则表达式的html标签?如何计算html标签和内容

+0

你是在开玩笑吧,不是吗?如果不是,不,你不能,你不应该。阅读http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Amarghosh 2010-03-17 09:32:06

+3

只要计算'<'的数量 - 这会给你相同的用正则表达式可以得到一种精确度。 – 2010-03-17 09:35:43

+0

另外,即使你准备好处理使用它的问题,正则表达式也不会计数。至少你必须使用例如perl将html加载到变量中,并对“<”(不包括“<! - ”)执行split(),然后检查结果数组的长度。 – Timo 2010-03-17 09:47:16

回答

2

不要使用正则表达式使用DOM。我不确定你会怎么做,但它几乎肯定会更容易与DOM: http://php.net/manual/en/book.dom.php

+0

谢谢。 DomDocument类很好,解决了我的问题,但我还有最后一个问题。我需要的名称 - (关键字)和 的内容 - (一些东西一切)。我有一个meta标签: 。 如何获得DomDocument类的名称和内容? – turbod 2010-03-17 11:14:24

+0

$ meta = $ dom-> getElementsByTagName('meta'); ($ i = 0; $ i < $meta-> length; $ i ++){ echo $ meta-> item($ i) - > getAttribute('name')。“ - ”。$ meta-> item($ i ) - > getAttribute('content')。“
”; } – turbod 2010-03-17 11:27:36

1

正则表达式并不旨在这样做。有一个更好的解决方案,你的问题,只是检查其他答案。

如果你只是需要一次,作为一个快速和肮脏的黑客,并不关心边缘情况下(如字符串中使用的逃逸标签),你可以使用"<\w+"来匹配起始标签,并计数匹配数。

但是你不应该这样做。 =)

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