在像/ p20这样的字符串中(可以是任意数字)我想将/ p替换为/ pag-但保留数字/ pag-20
这是我试过的:
preg_replace('/\/p+[0-9]/', '/pag-', $string);
但结果是/ pag-0
答案 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])
正向前瞻不会消耗它匹配的文本,即它不会将文本添加到匹配值。