-2

我正在使用这种方法:

$matches;
preg_match('/^days:\s(.*)$/', $line, $matches);
if (count($matches) > 1)
  return explode('; ', $matches[1]);
return array();

在具有以下行的文件上:

days: Monday; Thursday; Friday,

第一个结果(在示例中,Monday)总是带有days:添加的“”部分,如下所示:

array[0](
  myObject=>object
  (
    visitors[0]=>array //notice "visitors" is the problem.  It should be "days".
    (
      [0]=>days: Monday
      [1]=>Thursday
      [2]=>Friday
    )
  )
)

我认为正则表达式应该返回括号(())内的内容?

4

2 回答 2

2

$matches[0]将始终包含整个匹配项(触发匹配项的完整字符串),而不仅仅是用括号捕获的内容。这是大多数(全部?)正则表达式库的标准。您捕获的表达式以 1 开头。

于 2012-09-12T14:06:09.540 回答
1

正如 nickb 指出的那样,您的代码似乎运行得很好。也许当你手写它时,你实际上解决了生产代码中的一个问题。或者您看到的错误可能是您代码的另一部分发生的其他事情的结果。

这是我跑步时得到的

$line = "days: Monday; Thursday; Friday";
preg_match('/^days:\s(.*)$/', $line, $matches);
if (count($matches) > 1)
   var_dump(explode('; ', $matches[1]));

数组(3){[0]=>字符串(6)“星期一”[1]=>字符串(8)“星期四”[2]=>字符串(6)“星期五”}

于 2012-09-12T14:20:54.007 回答