2015-02-11 38 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