$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);
我试图取代所有字母字符后跟一个或多个空白字符(制表符和/或空格)后跟一个或多个数字字符,然后与字母字符后跟一个逗号分号后面的数字,然后是分号。这个PHP正则表达式有什么问题?
我会提供了一个例子:
开始:
hello world 1007;
结束:
hello world,1007;
$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);
我试图取代所有字母字符后跟一个或多个空白字符(制表符和/或空格)后跟一个或多个数字字符,然后与字母字符后跟一个逗号分号后面的数字,然后是分号。这个PHP正则表达式有什么问题?
我会提供了一个例子:
开始:
hello world 1007;
结束:
hello world,1007;
两个|
在开始和结束可能是不正确的 - 并且都应该是正斜杠。
所有其他正斜杠应该是反斜杠(并且需要转义)。
而且由于PHP 4.04 $n
是引用捕获组的首选方式。
$output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output);
如果使用单引号,你不需要逃避你的反斜线:
$output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output);
如果这些前瞻性斜杠是反斜杠?除非您将双引号改为单引号,否则您还需要为PHP转义它们。
你想在正则表达式的反斜杠,而不是正斜杠。开始和结束的管道是需要(或另一定界符正则表达式)
$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);
如果正确地记得开始和结束的模式的符号(的'|的)都必须在PHP preg_ *函数。 – 2008-09-10 13:12:51
好点 - 我也忘了逃避我的后斜线。 – samjudson 2008-09-10 13:18:55