2008-09-10 138 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); 
相關問題