有人可以告诉我为什么
//string
$content = 'random ${one.var} ${two.var} random';
//match
preg_match('/(?:(?<=\$\{))([\w.]+){1}(?=\})/i', $content, $matches);
正在返回
print_R($matches);
//output
array(
[0]=>one.var
[1]=>one.var
);
我想要的是
array(
[0]=>one.var
[1]=>two.var
);
答案 0 :(得分:2)
整个正则表达式(0)作为内部捕获()
(1)都匹配相同的东西,因此匹配的一部分是有意义的。您可能需要preg_match_all
,它可以捕获所有匹配项......
preg_match_all('/(?<=\$\{)[\w.]+(?=\})/i', $content, $matches);
答案 1 :(得分:1)
您应该使用preg_match_all
执行全局正则表达式搜索,我认为您可以通过这种方式简化模式:
preg_match_all('/\$\{(.*?)\}/', $content, $matches)
答案 2 :(得分:0)
试试preg_match_all()
http://php.net/preg_match_all搜索所有匹配的主题