如何获取多个自定义占位符内容?

时间:2015-02-11 14:42:13

标签: php regex

在PHP中,我有一个字符串,可以包含任意数量的客户占位符。在这种情况下,我正在使用' [%' &安培; '%]'作为每次迭代的自定义占位符。

如果我的字符串等于:

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

如何提取变量'所以我会有这样的事情:

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

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

2 个答案:

答案 0 :(得分:1)

使用preg_match_all函数进行全局匹配。

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

(?<=\[%)肯定的后瞻,断言匹配必须在[%符号之前。 (?=%])断言匹配必须后跟%]个符号。 .*?将对任何字符执行零次或多次非贪婪匹配。

<强>输出:

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

DEMO

答案 1 :(得分:1)

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

使用正则表达式:

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