我正在尝试将<div></p>
和<div>
以及<div foo="bar"></p>
等字符串替换为<div foo="bar">
我怎样才能使用preg_replace? 我不太了解Regex,但我正在尝试这样的事情:
preg_replace( '/(<div.*><\/p)/', '$1', $content);
答案 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">