preg_replace - 如何删除标签内的内容?

时间:2011-08-21 15:54:29

标签: php preg-replace

说我有这个。

$string = "<div class=\"name\">anyting</div>1234<div class=\"name\">anyting</div>abcd"; 
$regex = "#([<]div)(.*)([<]/div[>])#";
echo preg_replace($regex,'',$string);

输出是 ABCD

但我想要 1234ABCD

我该怎么做?

4 个答案:

答案 0 :(得分:9)

像这样:

preg_replace('/(<div[^>]*>)(.*?)(<\/div>)/i', '$1$3', $string);

如果你想删除div:

preg_replace('/<div[^>]*>.*?<\/div>/i', '', $string);

要仅使用类名而不是其他类替换div中的内容:

preg_replace('/(<div.*?class="name"[^>]*>)(.*?)(<\/div>)/i', '$1$3', $string);

答案 1 :(得分:3)

$string = "<div class=\"name\">anything</div>1234<div class=\"name\">anything</div>abcd"; 
echo preg_replace('%<div.*?</div>%i', '', $string); // echo's 1234abcd

实例:

http://codepad.org/1XEC33sc

答案 2 :(得分:0)

添加?,它会找到第一次出现

preg_replace('~<div .*?>(.*?)</div>~','', $string); 

http://sandbox.phpcode.eu/g/c201b/3

答案 3 :(得分:0)

这可能是一个简单的示例,但如果您有一个更复杂的示例,请使用HTML / XML解析器。例如DOMDocument

$doc = DOMDocument::loadHTML($string);
$xpath = new DOMXPath($doc);

$query = "//body/text()";
$nodes = $xpath->query($query);

$text = "";
foreach($nodes as $node) {
    $text .= $node->wholeText;
}    

您必须使用哪个查询或是否必须以其他方式处理DOM树,具体取决于您拥有的特定内容。