2014-09-12 86 views
8

我在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。我怎么做?

+1

RTM:http://php.net/manual/en/function.preg-replace.php – 2014-09-12 17:21:54

回答

4

你可以简单地做这样的,

$s="2044 blablabla 2033 blablabla 2088"; 
echo preg_replace("/(20\d\d)/","2014",$s); 
+0

mmmm ....你用'20'硬编码'$ 1'!??? – NoobEditor 2014-09-12 13:18:24

+1

他使用这种模式'(20)\ d \ d'不是'((d \ d)\ d \ d' – 2014-09-12 13:19:15

+0

是的它适用于这个问题,它不是一般的解决方案,谢谢所有 – ro0xandr 2014-09-12 13:25:32

7

检查preg_replace手册后:

当与替换模式,其中一个反向引用被 紧接着另一个号码工作(即:一个匹配的模式后放置文字数 立即),则不能使用用于反向引用的熟悉的 \\1表示法。 \\11,例如,将 混淆preg_replace(),因为它不知道你是否希望 \\1逆向引用后面文字1,或\\11 逆向引用后面什么都没有。在这种情况下,解决方案是使用 \${1}1。这创建了一个单独的反向引用,将1 作为文字。

因此,使用

"\${1}14" 

'${1}14' 
+1

新的结果类似这样4 blablabla 4 blablabla 4 – ro0xandr 2014-09-12 13:14:05

+0

@ ro0xandr检查上面的编辑。 – hjpotter92 2014-09-12 13:19:12

+0

@CasimiretHippolyte击败你8秒...! :D – NoobEditor 2014-09-12 13:20:20

2

您需要使用preg_replace_callback()功能:

echo preg_replace_callback("/(20)\d\d/", function($number) { 
    return $number[1].'14'; 
},$s); 

// 2014 blablabla 2014 blablabla 2014 
12

你需要使用单引号内大括号:

echo preg_replace("/(20)\d\d/",'${1}14',$s); 
相关问题