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

Tho*_*ens 2 php regex

$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);
Run Code Online (Sandbox Code Playgroud)

我试图替换所有字母字符后跟一个或多个空格字符(制表符和/或空格),后跟一个或多个数字字符,后跟分号,后跟逗号后跟数字,然后是分号.

我举一个例子:

开始:

hello world      1007;
Run Code Online (Sandbox Code Playgroud)

结束:

hello world,1007;
Run Code Online (Sandbox Code Playgroud)

sam*_*son 6

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

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

因为PHP 4.04 $n是引用捕获组的首选方式.

$output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output);
Run Code Online (Sandbox Code Playgroud)

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

$output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output);
Run Code Online (Sandbox Code Playgroud)

  • 如果我没记错的话,PHP preg_*函数中需要模式的开始和结束符号('|'). (3认同)