我正在尝试将href属性的内容替换为其他URL
所以我用这个脚本
$html = 'data-content="111"';
$var_2 = "222";
$html = preg_replace('/(["\'])111\1/i',"$1$var_2$1",$html);
echo $html
输出为
data-content=22"
我所期待的
data-content="222"
问题是编译器查找匹配$12,因为$var_2以数字“2”开头
我试着像这样编辑代码,但没有成功
$html = preg_replace('/(["\'])111\1/i','$1'.$var_2.'$1',$html);
1条答案
按热度按时间vc9ivgsu1#
您可以通过对替换组使用2位数字(在本例中为
01
)来解决此问题:输出:
Demo on 3v4l.org
您也可以使用
preg_replace
manual页面中介绍的方法解决此问题:当使用反向引用后面紧跟另一个数字的替换模式时(即:在匹配的模式之后立即放置文字数字),则不能使用熟悉的\1表示法进行反向引用。例如,\11会混淆preg_replace(),因为它不知道您是否希望\1反向引用后面跟随文字1,或者后面不跟任何内容的\11反向引用。在这种情况下,解决方案是使用${1} 1。这将创建一个隔离的$1反向引用,并将1保留为文本。
注意在这个例子中
${1}
必须用单引号括起来,以防止PHP试图用变量$1
的值来替换它。还要注意对于示例数据来说,i
(不区分大小写)标志是不需要的,我已经删除了它。Demo on 3v4l.org