下面的工作在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]等即可查看结果。