将<div class =“something”>替换为<p> </p> </div>

时间:2013-09-19 20:43:14

标签: php regex preg-replace

我正在尝试将<div></p><div>以及<div foo="bar"></p>等字符串替换为<div foo="bar">

我怎样才能使用preg_replace? 我不太了解Regex,但我正在尝试这样的事情:

preg_replace( '/(<div.*><\/p)/', '$1', $content);

1 个答案:

答案 0 :(得分:1)

您可以使用[^>]*之类的表达式来匹配所有内容,但不包括下一个>,并使用$1组在()中捕获它,如果有的话完全存在(因为*匹配前面表达式的零个或多个)

这使你的表达看起来像:

/<div([^>]*)><\/p>/

然后您的替换模式<div$1>使用该反向引用,该反引用现在包含<div>之间的所有内容,包括其空格。

它的工作原理如下:

$s1 = '<div></p>';
$s2 = '<div foo="bar"></p>';

echo preg_replace('/<div([^>]*)><\/p>/', '<div$1>', $s1);
// <div>
echo preg_replace('/<div([^>]*)><\/p>/', '<div$1>', $s2);
// <div foo="bar">

另一种与您尝试的方法更相似的方法是将<div>结构作为一个单元捕获到$1 (<div[^>]*>),然后成为整个替换表达式:

echo preg_replace('/(<div[^>]*>)<\/p>/', '$1', $s1);
// <div>
echo preg_replace('/(<div[^>]*>)<\/p>/', '$1', $s2);
// <div foo="bar">