我有这个:
<div> 16</div>
我想要这个:
<div><span>16</span></div>
目前,这是我能让它发挥作用的唯一方法:
preg_replace("/(\D)(16)(\D)/", "$1<span>$2</span>$3", "<div> 16</div>")
如果我放弃3美元,我会得到:
<div><span>16</span>/div>
答案 0 :(得分:3)
不太确定你的追求,但以下更通用:
$value = "<div> 16 </div>";
echo(preg_replace('%(<(\D+)[^>]*>)\s*([^\s]*)\s*(</\2>)%', '\1<span>\3</span>\4', $value));
哪会导致:
<div><span>16</span></div>
即使价值是:
<p> 16 </div>
这将导致:
<p><span>16</span></p>
答案 1 :(得分:2)
我想你的意思是说你正在使用以下内容:
print preg_replace("/(\\D+)(16)(\\D+)/", "$1<span>$2</span>$3", "<div>16</div>");
这没什么不对。 $ 3将包含第二个(\ D +)组中匹配的所有内容。如果你把它关掉,显然它不会神奇地出现。
请注意,问题中的代码存在一些错误:
\
。\D+
来匹配多个字符。\s*
匹配任意数量的空白字符。答案 2 :(得分:1)
尝试以下操作 -
$str = "<div class=\"number\"> 16</div>";
$formatted_str = preg_replace("/(<div\b[^>]*>)(.*?)<\/div>/i", "$1<span>$2</span></div>", $s);
echo $formatted_str;
答案 3 :(得分:0)
这就是最好的工作:
preg_replace('/(<.*>)\s*('. $page . ')\s*(<.*>)/i', "$1" . '<span class="curPage">' . "$2" . '</span>' . "$3", $pagination)
我发现的是我不确定在页码之前或之后会有哪些标签。