除了div类之外,我想从字符串中删除所有html内容:<div class="toto">blablabla</div>
我应该使用正则表达式还是DOM解析器?
回答drachenstern:
这是bbcode的评论内容。 并且这个div中的html是用Geshi(代码突出显示器)生成的,所以我不想删除它。
例如,访问者可以在<script></script>
bbcode代码中输入[code][/code]
。
[code][/code]
bbcode标记之外的所有HTML都必须删除否?
答案 0 :(得分:1)
这是almost impossible to use a Regex to successfully extract data from a webpage所以我建议改为使用dedicated HTML parser。有些问题对于你来说每次尝试解决它们都很重要,所以它被认为是use an external library可以接受的。
如果你只需要一个div,我想知道你在尝试用特定的div做什么。它可以在客户端工作,还是必须在服务器端发生?你想写一个刮刀吗?
答案 1 :(得分:0)
我想你已经知道了答案:-)
严重但是......在这种情况下,它取决于周围字符串的复杂性...如果它有一个很大的差异或你要保留的片段深层嵌套,那么dom解析器会生成sonse ..如果周围内容是非常可预测的,然后正则表达式可以做。我可能会以任何一种方式使用DOM,因为它更容易使用并且是最安全的。
答案 2 :(得分:0)
除非你能保证字符串的这一部分完全是<div class="toto".....</div>
形式,否则正则表达式不能这样做。确切地说,我的意思是class
之前没有其他属性,而且这个属性中没有其他div
元素。大写/小写,空格和单/双引号应该能够由正则表达式处理。
由于您可能无法做出这些保证(如果可能的话,这将是一种例外情况),您需要一个DOM解析器
即使您确实为这个非常具体的案例制作正则表达式,如果您要在其他地方进行可能的更改或执行类似的任务,那么DOM解析器很快就会变得有价值。
编辑 - 错误地将空白分类,固定。
答案 3 :(得分:0)
wordpress和其他人仍然使用kses,它似乎是一个非常灵活的过滤器 - 在这里查看:http://sourceforge.net/projects/kses/
示例:
$string = kses($string, array('div' => array('valueless' => 'n', value => 'toto')));
答案 4 :(得分:0)
(我假设PHP标签中的以下内容很有用......)
strip_tags()就是这样做的。示例代码
<?php
$text = '<p>Test paragraph.</p> <div class="blah">Other text</div>';
echo strip_tags($text, '<div>');
echo "\n";
?>
产生输出
Test paragraph. <div class="blah">Other text</div>