如何将preg_match结果直接分配给变量?

时间:2016-09-12 10:33:35

标签: php preg-match

以下适用于PHP:

preg_match("/a/", "a", $m);
list($zero) = $m;

但以下是错误:

preg_match("/a/", "a", list($zero));

PHP文档说list()是一种语言结构,但我想具体理解为什么会失败。另外,还有另一种方法可以将结果直接分配给变量(例如sscanf())吗?

2 个答案:

答案 0 :(得分:1)

我想,我能提供的答案并不令人满意。 list()就像你说的语言结构一样,它就像你在第二个例子中使用它一样不起作用。这是按照定义,不能更改。

我虽然使用extract()来获取变量,但这会冒犯PHP“严格标准,如果你这样使用它:

preg_match("/a/", "a", extract($m, EXTR_PREFIX_ALL, 'preg'));

Strict Standards:  Only variables should be passed by reference

我想你无论如何都必须使用双线解决方案,因为preg_match()的引用传递。

答案 1 :(得分:0)

preg_match中的第三个参数是一个数组。通过声明$m,您只需说明返回的匹配变量名称数组是什么。当您声明list()错误时,因为list()是一种语言结构,并且它需要一个变量名称。您要做的事情(将匹配结果直接分配给变量)已经完成。 $ matches(在你的情况下是$m),是变量。它是类型数组的变量。只需var_dump你的$ m或回显$ m [0],$ m [1]等等,看看结果。