我在PHP中使用正则表达式。这是我的剧本:
$s="2044 blablabla 2033 blablabla 2088";
echo preg_replace("/(20)\d\d/","$1 14",$s);
结果是这样的:
20 14 blablabla 20 14 blablabla 20 14
我想删除20
和14
之间的空格,以获得结果2014
。我该怎么做?
答案 0 :(得分:12)
您需要在单引号内使用大括号:
echo preg_replace("/(20)\d\d/",'${1}14',$s);
答案 1 :(得分:7)
检查preg_replace
手册后:
使用反向引用的替换模式时 紧接着是另一个数字(即:放一个字面数字 在匹配的模式后立即),你不能使用熟悉的
\\1
表示您的反向引用。例如,\\11
会 混淆preg_replace()
,因为它不知道你是否想要\\1
反向引用后跟文字1
或\\11
反向引用后面没有任何内容。在这种情况下,解决方案是使用\${1}1
。这会创建一个孤立的$1
反向引用,留下1
作为文字。
因此,请使用
"\${1}14"
或
'${1}14'
答案 2 :(得分:4)
你可以这样做,
$s="2044 blablabla 2033 blablabla 2088";
echo preg_replace("/(20\d\d)/","2014",$s);
答案 3 :(得分:2)
您需要使用preg_replace_callback()
功能:
echo preg_replace_callback("/(20)\d\d/", function($number) {
return $number[1].'14';
},$s);
// 2014 blablabla 2014 blablabla 2014