Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何删除此正则表达式输出中的空格?_Php_Regex_Preg Replace_Preg Match - Fatal编程技术网

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

Php 如何删除此正则表达式输出中的空格?,php,regex,preg-replace,preg-match,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 我想删除20和14之间的空格,以获得结果2014。如何执行此操作?检查preg\u replace手册后: 使用替换模式时,如果反向引用 紧接着是另一个数字(即:放置一个文字数字 在匹配模

我在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
。如何执行此操作?

检查
preg\u replace
手册后:

使用替换模式时,如果反向引用 紧接着是另一个数字(即:放置一个文字数字 在匹配模式之后),您不能使用熟悉的
\\1
用于反向参考的符号<例如,代码>\\11 混淆
preg\u replace()
,因为它不知道您是否需要
\\1
后接文字
1
,或
\\11
反向引用后面没有任何内容。在这种情况下,解决方案是使用
\${1}1
。这将创建一个独立的
$1
反向引用,保留
1
作为字面意思

因此,使用

"\${1}14"


你可以这样做

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

您需要使用
preg\u replace\u 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);

像这样的新结果4blabla4blabla4@ro0xandr检查上面的编辑。@CasimiritHippolyte以8秒的优势击败你…!!:Dmmmm…您正在用
20
硬编码
$1
!???他使用了此模式
(20)\d\d
而不是
(\d\d)\d\d
是的,它适用于此问题,不是通用解决方案,感谢allRTM:
echo preg_replace("/(20)\d\d/",'${1}14',$s);