Preg_match_all 在数组中返回数组?

Posted

技术标签:

【中文标题】Preg_match_all 在数组中返回数组?【英文标题】:Preg_match_all returning array within array? 【发布时间】:2011-08-28 14:34:22 【问题描述】:

我试图从这个数组中获取信息,但由于某种原因,它将所有内容都嵌套到 $matches[0] 中。

<?

$file = shell_exec('pdf2txt.py docs/April.pdf');

preg_match_all('/.../',$file,&$matches);
print_r($matches)

?>

这是否按预期工作?有没有办法把它放在深度为 1 的数组中?

编辑:

这是正则表达式:

([A-Z][a-z]+\s)1,5\s?[^a-zA-Z\d\s:,.\'\"]\s?[A-Za-z+\W]+\s[\d]1,2\s[A-Z][a-z]+\s[\d]4

【问题讨论】:

这是您使用的正则表达式吗?展示真实的 【参考方案1】:

preg_match_all() 总是返回一个数组(如果成功,否则你会得到一个空数组),其中索引 0 包含一个数组,其中每个完整匹配项都有一个元素,其他索引成为捕获组,具有一个内部数组每场比赛。

这可能更容易理解...

array(2) 
  [0]=>
  array(2) 
    [0]=>
    string(12) "entire match"
    [1]=>
    string(32) "entire match matched second time"
  
  [1]=>
  array(2) 
    [0]=>
    string(15) "capturing group"
    [1]=>
    string(35) "capturing group matched second time"
  

【讨论】:

哇。就像《盗梦空间》。让我试着解决这个问题。 哇...当 Family Guy 爆炸声很大时,我按下了那个红色按钮!赢了! @RVWard 不用担心,很高兴它是合适的 :)【参考方案2】:

如果您的目标是仅获取捕获的字符(由“([A-Z][a-z]+\s)1,5”捕获的内容),您应该查看 $matches[1]。 $matches[1][0] 包含第一个捕获的字符序列。

根据preg_match_all docs,如果未指定顺序标志(如您的示例中所示),则假定为 PREG_PATTERN_ORDER。使用此模式,您会发现 $matches[0] 是一个数组,其中包含与您的完整模式匹配的所有字符串,而 $matches[1] 包含由您的正则表达式捕获的字符串数组。

【讨论】:

Alex 完美地说明了这一点。 =)

以上是关于Preg_match_all 在数组中返回数组?的主要内容,如果未能解决你的问题,请参考以下文章

突出显示 preg_match_all() 的主题字符串中的匹配结果

JavaScript -- 常用的数组及字符串方法

数组的循环与迭代......字符串

算法第二章上机实践报告

C语言中函数调用怎么返回两个值

js数组常用操作方法小结(增加,删除,合并,分割等)