如何删除此正则表达式输出中的空格?

时间:2014-09-12 13:11:07

标签: php regex preg-replace preg-match

我在PHP中使用正则表达式。这是我的剧本:

$s="2044 blablabla  2033 blablabla 2088";
echo preg_replace("/(20)\d\d/","$1 14",$s);

结果是这样的:

20 14 blablabla 20 14 blablabla 20 14

我想删除2014之间的空格,以获得结果2014。我该怎么做?

4 个答案:

答案 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