2008-09-10 140 views
2
$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output); 

我试图取代所有字母字符后跟一个或多个空白字符(制表符和/或空格)后跟一个或多个数字字符,然后与字母字符后跟一个逗号分号后面的数字,然后是分号。这个PHP正则表达式有什么问题?

我会提供了一个例子:

开始:

hello world  1007; 

结束:

hello world,1007; 

回答

6

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

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

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

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

如果使用单引号,你不需要逃避你的反斜线:

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

如果正确地记得开始和结束的模式的符号(的'|的)都必须在PHP preg_ *函数。 – 2008-09-10 13:12:51

+0

好点 - 我也忘了逃避我的后斜线。 – samjudson 2008-09-10 13:18:55

3

如果这些前瞻性斜杠是反斜杠?除非您将双引号改为单引号,否则您还需要为PHP转义它们。

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); 
相关问题