2012-02-25 102 views
1

我知道這個問題之前已經被問過,因爲我只是在閱讀這些答案,但仍然不能得到這個工作(正確)。preg_replace沒有正確匹配

林很新的正則表達式,我試圖做一些事情,聽起來很簡單:

該字符串應該是: http://www.something.com/section/filter/colour/red-#998682/size/small/

我想這樣做是preg_replace函數刪除 - #? ?????所以URL看起來像: http://www.something.com/section/filter/colour/red/size/small/

所以我嘗試:

$string = $theURL; 
$pattern = '/-\#(.*)\//i'; 
$replacement = '/'; 
$newURL = preg_replace($pattern, $replacement, $string); 

那種作品,但它不停止。如果我有什麼後面的 - #??????它也消除了這一點。但我認爲有/最終會阻止它這樣做?

希望有人能幫助和閱讀

感謝

回答

1

PCRE是默認的貪婪,這意味着.*將大塊匹配越好。讓它ungreedy通過添加U標誌(整個圖形),或使用.*?(僅針對該通配符部分):

/-\#(.*)\//iU 

/-\#(.*?)\//i 
+0

哇謝謝大家的快速答覆。這工作完美。需要等待幾分鐘,直到它讓我選擇一個答案。再次感謝:) – fl3x7 2012-02-25 21:55:46

1

您需要使用非貪婪量詞。

$pattern = '/-\#(.*?)\//i'; 

你的正則表達式是貪婪的,這意味着(.*)\/尋找最後一個斜線,而不是第一個。

demo

1

(.*)圖案是gready,這意味着它會匹配儘可能多的字符可能的。要匹配所有的第一斜線使用(.*?)

$pattern = '/-\#(.*?)\//i';