$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