如何在PHP中查找,增加和替换?

Sha*_*awn 2 php regex backreference preg-replace

我在表单中有字符串,\d+_\d+我想在第二个数字中添加1.由于我的解释非常清楚,让我举几个例子:

  • 1234567_2应该变为1234567_3
  • 1234_10应该变成1234_11

这是我的第一次尝试:

$new = preg_replace("/(\d+)_(\d+)/", "$1_".((int)$2)+1, $old);
Run Code Online (Sandbox Code Playgroud)

这会导致语法错误:

解析错误:语法错误,意外T_LNUMBER,在[...] 201行上预期T_VARIABLE或'$'

这是我的第二次尝试

$new = preg_replace("/(\d+)_(\d+)/", "$1_".("$2"+1), $old);
Run Code Online (Sandbox Code Playgroud)

这会将$ old = 1234567_2转换为$ new = 1234567_1,这不是所需的效果

我的第三次尝试

$new = preg_replace("/(\d+)_(\d+)/", "$1_".((int)"$2"+1), $old);
Run Code Online (Sandbox Code Playgroud)

这产生了同样的结果.

通过做这些尝试,我意识到我不明白新的$ 1,$ 2,$ 3,..变量是如何工作的,所以我真的不知道还有什么可以尝试,因为看起来这些变量在退出时不再存在preg_replace函数...

有任何想法吗?

cdh*_*wie 7

$new = preg_replace("/(\d+)_(\d+)/e", '"$1_" . ("$2" + 1)', $old);
Run Code Online (Sandbox Code Playgroud)

$1等条款实际上不是变量,它们是字符串,preg_replace将替换文本解读.所以没有办法使用基于文本的直接文件preg_replace.

但是,/e正则表达式上的修饰符要求preg_replace将替换解释为代码,其中标记$1等实际上将被视为变量.您提供的代码字符串,并preg_replaceeval()在适当的情况下它,使用它的结果作为替代品.