preg_match_all返回一个数组,其中包含另一个数组?

5
我试图从这个数组中获取信息,但由于某种原因,它将所有内容嵌套到$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}

这是你正在使用的正则表达式吗?请展示真正的正则表达式。 - Ibu
2个回答

14

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"
  }
}

1
哇,这就像《盗梦空间》一样。让我试着理解一下。 - Ryan Ward Valverde
哇...当《恶搞之家》声音很大时,我按下了那个红色按钮!胜利! - Ryan Ward Valverde
@RVWard 不用担心,很高兴它是合适的 :) - alex

2
如果您的目标是仅获取捕获的字符(由“([A-Z] [a-z] + \ s){1,5}”捕获),则应查看$matches [1]。 $matches [1] [0]包含第一个捕获的字符序列。
根据preg_match_all文档,如果未指定顺序标志(如您的示例中),则假定PREG_PATTERN_ORDER。使用此模式,您将发现$matches [0]是一个包含与完整模式匹配的所有字符串的数组,$matches [1]包含由正则表达式捕获的字符串数组。

1
亚历克斯讲得非常好。=) - Tails

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接