这个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);