我試圖用PHP的preg_replace替換前兩個字母和空格後的所有字母和空格。這是我在這樣的失敗嘗試:幫助PHP正則表達式
echo preg_replace('/^[a-zA-Z]{2}([a-zA-Z ])*.*$/i','','FALL 2012'); //expected output is "FA2012", but it outputs nothing
我只是試圖取代括號([a-zA-Z ])
部分..我猜我不是在做正確的只需更換這部分..
我試圖用PHP的preg_replace替換前兩個字母和空格後的所有字母和空格。這是我在這樣的失敗嘗試:幫助PHP正則表達式
echo preg_replace('/^[a-zA-Z]{2}([a-zA-Z ])*.*$/i','','FALL 2012'); //expected output is "FA2012", but it outputs nothing
我只是試圖取代括號([a-zA-Z ])
部分..我猜我不是在做正確的只需更換這部分..
您要求它替換整個字符串。改爲使用lookbehind來匹配前兩個字符。
echo preg_replace('/(?<=^[a-z]{2})[a-z ]*/i','','FALL 2012');
順便說一句,在i
修改意味着它是區分大小寫的,所以你不需要同時匹配大寫和小寫字符。
最後的/i
使其不區分大小寫。 (?<=regex)
意味着緊挨着當前位置前面的行開頭,後面跟着2個字母。
echo preg_replace('/(?<=^[a-z]{2})[a-z ]*/i','','FALL 2012');
你是說用空白('')替換整個匹配。您希望將圓括號放在要保留的部分的周圍,然後用$ 1 $ 2替換,該值等於第一個($1
)和第二個($2
)括號中的值。
preg_replace("/^([a-z]{2})[a-z\s]*(.*)$/i", '$1$2', $string);
在這種情況下,你可以逃脫(?<=lookbehind)
;但是,在某些其他情況下,您可能會發現\ K轉義更合適。它的作用是將應用程序傳遞的起始偏移值重置爲主題中的當前位置,從而有效地轉儲當前匹配中到目前爲止消耗的字符串部分。例如:
preg_replace('^[a-z]{2}\K[a-z ]*/i', '', 'FALL 2012')
現在只有被[a-z ]*
匹配的子字符串被替換。
我想你有preg_match/preg_replace倒退。 preg_replace在替換中使用分組。第一組是1美元,第二組是2美元......等等。 –
該表達式有一個拼寫錯誤(?<而不是?<=),並且它不會匹配任何內容,因爲在主題開始之前不能有任何字符(^需要包含在lookbehind中)。 – jaytea
@Jonathan:你說得對。清楚地沒有足夠的咖啡。刪除了我答案的那一部分。 –