PHP preg_match:如何将变量传递给preg_match?

时间:2011-01-15 08:07:59

标签: php regex preg-match

这可以找到它的内容:

if(!preg_match($match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches))

但这不是:

if(!preg_match("/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches))

preg_match的函数引用表示传递的第一个参数应为:

  

要搜索的模式,作为   字符串。

但我上面给出的工作示例将模式分配给变量:$match=...

这里发生了什么?我从未见过像preg_match这样的变量。我认为应该是:

preg_match(string $regexpattern, string $thingtosearch, array $matches)

有谁能解释这里发生了什么?

2 个答案:

答案 0 :(得分:3)

第一个示例将模式保存到局部变量。

if(!preg_match($match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches))

这相当于写它:

$match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i";   
if(!preg_match($match,$line,$matches))

preg_match函数没有“看到”参数被赋值给变量,它只接收到值 - 因为PHP中没有命名的函数参数。因此,如何命名局部变量并不重要,手册中的$ param定义对功能没有任何影响。

此代码结构的可能解释是,以后可能会重用正则表达式模式$match。有时这种表示法仅用于可读性。 (它正在扩大局部变量范围,但增加了一些小的清晰度。)

答案 1 :(得分:2)

assignment expression返回已分配的值。因此,在您的情况下,赋值表达式$match="…"将返回指定的值"…",这将导致函数的参数与没有赋值的情况相同。

在某些情况下(例如while

),这样做非常有用
while ($row = mysql_fetch_array($result))

此处$row = mysql_fetch_array($result)返回mysql_fetch_array($result)返回的相同值,但也分配给$row