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


How can I assign preg_match results directly to variables?

下面的工作在PHP中:

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

但是下面给出了一个错误:

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

PHP文档说list()是一个语言结构,但我想具体地理解为什么这失败了。此外,是否有另一种方法将结果直接分配给变量(如sscanf())?

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

我想使用extract()来获取变量,但这违反了PHP的严格标准,如果您像这样使用它:

preg_match("/a/", "a", extract($m, EXTR_PREFIX_ALL, 'preg'));
Strict Standards:  Only variables should be passed by reference

我猜你将不得不使用两行解决方案,因为preg_match()的引用传递。

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