我正在尝试用<div></p>
with<div>
和<div foo="bar"></p>
with替换字符串<div foo="bar">
如何使用 preg_replace 做到这一点?我不太了解正则表达式,但我正在尝试类似的东西:
preg_replace( '/(<div.*><\/p)/', '$1', $content);
我正在尝试用<div></p>
with<div>
和<div foo="bar"></p>
with替换字符串<div foo="bar">
如何使用 preg_replace 做到这一点?我不太了解正则表达式,但我正在尝试类似的东西:
preg_replace( '/(<div.*><\/p)/', '$1', $content);
您可以使用一个表达式[^>]*
来匹配所有内容,但不包括下一个>
,并将其捕获到$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
with(<div[^>]*>)
中,然后变成整个替换表达式:
echo preg_replace('/(<div[^>]*>)<\/p>/', '$1', $s1);
// <div>
echo preg_replace('/(<div[^>]*>)<\/p>/', '$1', $s2);
// <div foo="bar">