2014-04-30 19 views
0

我猜这个函数在PHP的确切工作:preg_match_allpreg_match_all解释

$var = "Example"; 
$n = preg_match_all('/[AEIOU]/i', strtoupper($var), $matches); 

echo "$n<p>"; // Output: 3 
echo $matches[0][1]; // Output: A 

这几乎是完全清楚对我说:查找元音的所有比赛中的变量$var,放在$n其数量,而找到的匹配进入变量$matches。但是,如果第一个索引必须为0,为什么$matches是一个二维数组?它不应该是像$matches[1]? (但它不起作用)

如何利用下一个索引?

+3

“按照标志排列的多维数组中所有匹配的数组”。 - 来自文档。阅读有关标志。 http://us1.php.net/manual/en/function.preg-match-all.php – Jessica

+2

是否因为这样设计而成为答案? )当需要使用捕获组时,'$ matches [1..n]'是非常有用的。 – raina77ow

+0

请注意,我修改器在这里是没用的 –

回答

1

“第一个索引必须为0”,因为这是“整个匹配”的索引。索引1将在第一个子模式中使用,如果有的话。索引2第二个子模式,依此类推。

此行为可以使用PREG_*_ORDER常数进行调整,请参阅docs

+0

我不知道这种模式的事情,但在探索链接后,我似乎更多地了解了文档。由于我不使用子模式,我确信我可以使用'$ matches = $ matches [0];'(不丢失数据)来解决 – user1714647

+0

当然,这是正确的。 –