正则表达式匹配特定的HTML字符串,其中包含任意数量的空格

时间:2012-02-23 18:28:52

标签: php regex

我有几行这样的代码

<p> &lt;inset&gt;</p>

如果字符串在开头<p>标记与其余标记之间可能有任意数量的空格或制表符(或无)。我需要更换这些,但我不能让它工作。

我认为这会做到,但它不起作用:

<p>[ \t]+&lt;inset&gt;</p>

3 个答案:

答案 0 :(得分:5)

试试这个:

$html = preg_replace('#(<p>)\s+(&lt;inset&gt;</p>)#', '$1$2', $html);

答案 1 :(得分:1)

如果您想要对HTML进行真正的文本修剪,包括您可以遇到的所有内容,例如权利,评论,子元素和所有内容,您可以使用TextRangeTrimmerTextRange:< / p>

$htmlFragment = '<p> &lt;inset&gt;</p>';

$dom = new DOMDocument();
$dom->loadHTML($htmlFragment);
$parent = $dom->getElementsByTagName('body')->item(0);
if (!$parent)
{
    throw new Exception('Parent element not found.');
}

$range = new TextRange($parent);
$trimmer = new TextRangeTrimmer($range);
$trimmer->ltrim();

// inner HTML (PHP >= 5.3.6)
foreach($parent->childNodes as $node)
{
    echo $dom->saveHTML($node);
}

输出:

<p>&lt;inset&gt;</p>

我在这两个课程中都有一个要点:https://gist.github.com/1894360/(键盘v蛇已关闭)。

请参阅相关问题/答案:

答案 2 :(得分:-2)

尝试将HTML字符串加载到DOM树中,然后trim加载树中的所有文本值。

http://php.net/domdocument.loadhtml

http://php.net/trim