preg_match和一个麻烦的正则表达式

时间:2012-02-22 20:46:57

标签: php regex

有人可以告诉我为什么

//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
);

3 个答案:

答案 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搜索所有匹配的主题

     

http://php.net/preg_match搜索主题匹配