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

时间:2008-09-10 13:04:57

标签: php regex

$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);

我正在尝试替换所有字母字符,后跟一个或多个空格字符(制表符和/或空格),后跟一个或多个数字字符,后跟分号,后跟逗号后跟数字后面的字母字符然后是分号。

我将提供一个例子:

开始:

hello world      1007;

结束:

hello world,1007;

3 个答案:

答案 0 :(得分:6)

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

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

由于PHP 4.04 $n是引用捕获组的首选方式。

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

您需要正则表达式中的反斜杠,而不是正斜杠。需要 的起始和结束管道(或正则表达式的另一个分隔符)

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