2015-02-11 39 views
0

在PHP中,我有一個字符串,可以包含任意數量的客戶佔位符。在這種情況下,我使用'[%'&'%]'作爲每次迭代的自定義佔位符。如何獲取多個自定義佔位符內容?

如果我的字符串等於:

"test [%variable1%] test test [%variable2%]" 

我如何提取「變量」所以我有這樣的事情:

array(
    [0] => variable1, 
    [1] => variable2 
); 

目前我有:\b[\[%][a-z.*][\]%]\b但我知道這是不正確的。

回答

1

使用preg_match_all函數來進行全局匹配。

$re = "~(?<=\[%).*?(?=%])~m"; 
$str = "test [%variable1%] test test [%variable2%]"; 
preg_match_all($re, $str, $matches); 
print_r($matches[0]); 

(?<=\[%)正回顧後,它斷言匹配必須由[%符號preceeded。 (?=%])斷言匹配後必須跟着%]符號。 .*?將零次或多次執行任何字符的非貪婪匹配。

輸出:

Array 
(
    [0] => variable1 
    [1] => variable2 
) 

DEMO

+0

非常感謝的快速反應。工作過一種享受! – Lancashireman 2015-02-11 14:48:55

+1

@Boltonian_Soldier如果您發現答案可解決您的問題,請點擊投票按鈕下方的綠色勾號將其標記爲已接受。 – cybermonkey 2015-02-11 14:52:17

1
$re = "/\\[%(.*?)%\\]/"; 
$str = "test [%variable1%] test test [%variable2%]"; 
preg_match_all($re, $str, $matches); 

正則表達式中使用:

/\[%(.*?)%\]/g