preg_replace(),后跟一个以数字开头的字符串



我正在尝试用另一个URL 替换href属性的内容

所以我使用这个脚本

$html = 'data-content="111"';
$var_2 = "222";
$html = preg_replace('/(["'])1111/i',"$1$var_2$1",$html);
echo $html  

输出为

data-content=22"

我所期待的

data-content="222"

问题是编译器寻找匹配的$12,因为$var_;2〃;

我试着编辑这样的代码,但没有运气

$html = preg_replace('/(["'])1111/i','$1'.$var_2.'$1',$html);

您可以通过为替换组使用2位数(在本例中为01(来解决此问题:

$html = 'data-content="111"';
$var_2 = "222";
$html = preg_replace('/(["'])1111/', "$01$var_2$1",$html);
echo $html;

输出:

data-content="222"

3v4l.org 上的演示

您也可以使用preg_replace手册页面中描述的方法来解决它:

当使用一个backreference后面紧跟另一个数字的替换模式时(即:在匹配的模式后面紧跟一个文字数字(,不能使用熟悉的\1表示法作为backreference\例如,11会混淆preg_replace((,因为它不知道您是希望\1 backreference后面跟着文字1,还是希望\11 backreference什么都不跟着。在这种情况下,解决方案是使用${1}1.这将创建一个孤立的$1反向引用,将1保留为文字。

$html = preg_replace('/(["'])1111/', '${1}' . "$var_2$1",$html);

注意,在这种情况下,${1}必须用单引号括起来,以防止PHP试图用变量$1的值替换它。还要注意,对于示例数据,不需要正则表达式的i(不区分大小写(标志,我已经删除了它

3v4l.org 上的演示

相关内容

最新更新