这个PHP正则表达式有什么问题?

时间:2020-03-05 18:50:42  来源:igfitidea点击:
$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);

我正在尝试将所有字母字符替换为一个或者多个空白字符(制表符和/或者空格),然后替换为一个或者多个数字字符,再由分号替换为字母字符,再以逗号替换,再后面是数字,再替换为分号。

我将提供一个示例:

开始:

hello world      1007;

结尾:

hello world,1007;

解决方案

回答

这些正斜杠应该是反斜杠吗?除非我们将双引号更改为单引号,否则也需要为PHP转义它们。

回答

开头和结尾的两个|可能不正确,并且都应为正斜杠。

所有其他正斜杠应为反斜杠(并且需要转义)。

而且自PHP 4.04以来,$ n是引用捕获组的首选方式。

$output = preg_replace("/(\D)\s+(\d+;)/", ",", $output);

如果使用单引号,则无需转义反斜杠:

$output = preg_replace('/(\D)\s+(\d+;)/', ',', $output);

回答

我们需要在正则表达式中使用反斜杠,而不是正斜杠。需要开始和结束管道(或者正则表达式的另一个定界符)

$x = "hello world      1007;";    
echo preg_replace('|(\D)(\s+)(\d+)(;)|',',',$x);
echo preg_replace('/(\D)(\s+)(\d+)(;)/',',',$x);
echo preg_replace('{(\D)(\s+)(\d+)(;)}',',',$x);