在PHP中,我有一个字符串,可以包含任意数量的客户占位符。在这种情况下,我正在使用' [%' &安培; '%]'作为每次迭代的自定义占位符。
如果我的字符串等于:
"test [%variable1%] test test [%variable2%]"
如何提取变量'所以我会有这样的事情:
array(
[0] => variable1,
[1] => variable2
);
目前我有:\b[\[%][a-z.*][\]%]\b
,但我知道这是不正确的。
答案 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
)
答案 1 :(得分:1)
$re = "/\\[%(.*?)%\\]/";
$str = "test [%variable1%] test test [%variable2%]";
preg_match_all($re, $str, $matches);
使用正则表达式:
/\[%(.*?)%\]/g