我如何删除以<tag>开头并以</tag>结尾

时间:2014-02-13 20:59:30

标签: php

我想用php删除<h1> xxx yyyy zzz </h1>。但是,首先,我想控制字符串是以<h1>开头还是以</h1>

结尾

这个追求有功能吗?

if(string begins with '<h1>' and ends with '</h1>'){

    replace `<h1>`xxx yyyy zzz `</h1>` to 'NULL or empty space'

}

3 个答案:

答案 0 :(得分:4)

使用正则表达式怎么样?

$string = preg_replace( "/<h1>(.*?)<\\/h1>/", "", $string );

*?是非贪婪的

答案 1 :(得分:2)

正则表达式不适合这项工作。使用DOM解析器来解析HTML。这是使用内置DOMDocument类的解决方案。

$dom = new DOMDocument;
$your_html_string = '<h1>xxx yyyy zzz </h1>';
$dom->loadHTML($your_html_string);

$h1_tags = $dom->getElementsByTagname('h1');

// array of elements that are to be removed
$remove = array();
foreach ($h1_tags as $tag) {
    $remove[] = $tag;
}

// remove them
foreach($h1_tags as $tag) {
    $tag->parentNode->removeChild($tag);
}

// remove the DOCTYPE/html/body tags that DOM adds by default
$html = preg_replace(
    '~<(?:!DOCTYPE|/?(?:html|head|body))[^>]*>\s*~i', '', $dom->saveHTML()
);

echo $html;

Demo

答案 2 :(得分:0)

<?php
    $string = '<h1>AbcXycKasOkasdMpal</h1>';
    $pattern = '/<h1>.*<\/h1>/i';
    $replacement = '';
    echo preg_replace($pattern, $replacement, $string);
?>

通过使用正则表达式和PHP preg_replace函数,您可以精确定位并替换以<h1>开头并以空格字符串结束</h1>的每个字符串。

如果您不想替换,请查看preg_match


编辑:已更改为修复@SyntaxLAMP指出的内容。