在数字之前替换给定的子字符串

时间:2017-07-21 09:51:25

标签: regex replace

在像/ p20这样的字符串中(可以是任意数字)我想将/ p替换为/ pag-但保留数字/ pag-20

这是我试过的:

preg_replace('/\/p+[0-9]/', '/pag-', $string);

但结果是/ pag-0

1 个答案:

答案 0 :(得分:3)

使用捕获组和反向引用:

$string = "/p-20";
echo preg_replace('~/p-([0-9])~', '/pag-$1', $string);
                       ^^^^^^^          ^^

此处,/p-匹配文字子字符串和([0-9])匹配,捕获任意1个数字到组1中,可以通过$1反向引用来引用替换模式。

或者,您可以使用基于先行的解决方案:

preg_replace('~/p-(?=[0-9])~', '/pag-', $string);

请参阅PHP demo

此处,不需要反向引用,因为(?=[0-9])正向前瞻不会消耗它匹配的文本,即它不会将文本添加到匹配值。