6

我需要全部替换:

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

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

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

这是我到目前为止所拥有的:

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

这与整个<p>标签匹配,但我不确定我将如何<p>替换<h2>

我该怎么做呢?

4

4 回答 4

13

以下应该做你想要的:

$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}) 内的数字是一个量词,表示匹配前一个组一次。该量词可能不需要,但无论如何它都在那里并且工作正常。反斜杠转义任何特殊字符。最后,问号使该.*位不贪心,因为默认情况下它是。

于 2012-11-08T08:40:23.300 回答
1

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

$text = '<p class="someClass someOtherClass">content</p>';
$output = str_replace( array('<p', '/p>'), array('<h2', '/h2>'), $text );
于 2012-11-08T08:28:09.440 回答
0

它会工作:)

preg_replace('/<p .*?class="(.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$value);
于 2013-06-13T12:33:12.343 回答
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);
于 2016-09-05T21:38:36.550 回答