使用</p> <h2>标签替换<p class =“someClass”>的正则表达式?</h2>

时间:2012-11-08 08:14:31

标签: php regex replace paragraph html-heading

我需要替换所有:

<p class="someClass someOtherClass">content</p>

<h2 class="someClass someOtherClass">content</h2>

在一串内容中。基本上我只想用"p"替换"h2"

这是我到目前为止所做的:

/<p(.*?)class="(.*?)pageTitle(.*?)">(.*?)<\/p>/

匹配整个<p>代码,但我不确定如何用<p>替换<h2>

我将如何做到这一点?

4 个答案:

答案 0 :(得分:11)

以下应该做你想做的事:

$str = '<p>test</p><p class="someClass someOtherClass">content</p>';

$newstr = preg_replace('/<p .*?class="(.*?someClass.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$str);

echo $newstr;

点(.)匹配所有。星号匹配0或任意数量的匹配。括号内的任何内容都是一个组。 $2变量是对匹配组的引用。大括号({1})内的数字是一个量词,这意味着匹配前一组一次。可能不需要那个量词,但无论如何它仍然存在并且工作正常。反斜杠会转义任何特殊字符。最后,问号使.*位非贪婪,因为默认情况下它是。

答案 1 :(得分:1)

不要做得更好,但它会有所帮助:)

$text = '<p class="someClass someOtherClass">content</p>';
$output = str_replace( array('<p', '/p>'), array('<h2', '/h2>'), $text );

答案 2 :(得分:0)

它会起作用:))

preg_replace('/<p .*?class="(.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$value);

答案 3 :(得分:0)

抱歉,晚会很晚。我使用了答案中的正则表达式:

$str = '<p>test</p><p class="someClass someOtherClass">content</p>';

$newstr = preg_replace('/<p .*?class="(.*?someClass.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$str);

echo $newstr;

当你有更多的p标签时,这种方法有问题,比如在一个文本块中: 以下是我如何强化正则表达式以涵盖这种情况:

$newstr = preg_replace('/<p [^<]*?class="([^<]*?someClass.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$str);