我需要替换所有:
<p class="someClass someOtherClass">content</p>
与
<h2 class="someClass someOtherClass">content</h2>
在一串内容中。基本上我只想用"p"
替换"h2"
。
这是我到目前为止所做的:
/<p(.*?)class="(.*?)pageTitle(.*?)">(.*?)<\/p>/
匹配整个<p>
代码,但我不确定如何用<p>
替换<h2>
我将如何做到这一点?
答案 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);