如何删除此正则表达式输出中的空格?
我在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
。我怎么做?
你可以简单地做这样的,
$s="2044 blablabla 2033 blablabla 2088";
echo preg_replace("/(20\d\d)/","2014",$s);
mmmm ....你用'20'硬编码'$ 1'!??? – NoobEditor 2014-09-12 13:18:24
他使用这种模式'(20)\ d \ d'不是'((d \ d)\ d \ d' – 2014-09-12 13:19:15
是的它适用于这个问题,它不是一般的解决方案,谢谢所有 – ro0xandr 2014-09-12 13:25:32
检查preg_replace
手册后:
当与替换模式,其中一个反向引用被 紧接着另一个号码工作(即:一个匹配的模式后放置文字数 立即),则不能使用用于反向引用的熟悉的
\\1
表示法。\\11
,例如,将 混淆preg_replace()
,因为它不知道你是否希望\\1
逆向引用后面文字1
,或\\11
逆向引用后面什么都没有。在这种情况下,解决方案是使用\${1}1
。这创建了一个单独的反向引用,将1
作为文字。
因此,使用
"\${1}14"
或
'${1}14'
新的结果类似这样4 blablabla 4 blablabla 4 – ro0xandr 2014-09-12 13:14:05
@ ro0xandr检查上面的编辑。 – hjpotter92 2014-09-12 13:19:12
@CasimiretHippolyte击败你8秒...! :D – NoobEditor 2014-09-12 13:20:20
您需要使用preg_replace_callback()
功能:
echo preg_replace_callback("/(20)\d\d/", function($number) {
return $number[1].'14';
},$s);
// 2014 blablabla 2014 blablabla 2014
你需要使用单引号内大括号:
echo preg_replace("/(20)\d\d/",'${1}14',$s);
RTM:http://php.net/manual/en/function.preg-replace.php – 2014-09-12 17:21:54