2012-08-25 56 views
1

我是新來的正則表達式,我一直在嘗試使用它的URL,但我無法讓它工作。如何使用preg_replace替換斜槓內的所有內容? (只有每隔一場比賽被替換)

我有一個字符串,它是:

/插件/插件/插件/插件/插件/插件/

,我想,以取代所有的字母字符串「{字符}」,使得串最終被:

/{炭}/{炭}/{炭}/{炭}/{炭}/{炭}/

我已經試過這樣:

<?php 
    $pattern  = '#(/)([a-z\_]+)(/)#'; 
    $replacement = '$1{char}$3'; 
    $string   = '/plugins/plugins/plugins/plugins/plugins/plugins/'; 

    echo preg_replace($pattern, $replacement, $string); 
?> 

但這段代碼是導致此:

/{字符} /插件/ {字符} /插件/ {字符} /插件/

我在做什麼錯?

回答

3

問題是您的正則表達式匹配/plugins/ - 在前端和末端匹配斜線。每個字母只能由正則表達式匹配一次,所以如果斜線在一個單詞的末尾匹配,則不能將其作爲另一個單詞的開頭。因此,它只能匹配所有其他人。

試試這個:

<?php 
    $pattern  = '#(/)([a-z\_]+)(?=/)#'; 
    $replacement = '$1{char}'; 
    $string   = '/plugins/plugins/plugins/plugins/plugins/plugins/'; 

    echo preg_replace($pattern, $replacement, $string); 
?> 

它的工作原理是利用lookahead,而不是實際的匹配最後的斜槓(和「消費」吧),它只是檢查,以確保它的存在。

+0

我要添加的所有東西,你已經編輯到你的答案了。除了指出由於'$ 1'在這種情況下總是'/',所以你可以刪除括號並且在替換字符串中只需要一個文字'/'。 – IMSoP