我试图在WordPress中弄清楚这个插件的机制。 我有一个preg_match_all函数,如下所示:
preg_match_all('/(?<=\\[\\[).+?(?=\\]\\])/', $content, $matches, PREG_PATTERN_ORDER);
$numMatches = count($matches[0]);
for ($i = 0; $i < $numMatches; $i++) {
$postSlug = $matches[0][$i];
}
如果我理解正确,count($matches[0])
假设$content
中只有一个匹配。
我的目标是重新编写for语句以允许preg_match_all
脚本中的完整匹配数组。
我假设我应该用foreach ($matches as $postSlug)
替换for语句,而不是在最后使用令人困惑的$matches[0][$i]
。
不幸的是,最终输出似乎没有遍历数组中的每个元素。有任何想法吗?谢谢!
答案 0 :(得分:4)
如果我理解正确的话,count($ matches [0]假设$ content中只有一个匹配。
不完全; $matches[0]
表示整个正则表达式中的匹配数组(而不是$matches[1]
,它是正则表达式的第一个匹配组中的匹配数组)。因此,count($matches[0])
是他第一个匹配组中的匹配数。
你可以做你所说的并将for
循环重写为foreach
循环,但这可能不会改变任何东西,因为两种方法都应该遍历{{1}中的所有元素}。您确定要查找的结果是否与正则表达式匹配?
答案 1 :(得分:2)
如果您确实想要重写此代码,那么我建议您将PREG_SET_ORDER
作为最后一个参数,而不是PREG_PATTERN_ORDER
。这会先按结果对结果数组进行分组,然后将匹配组分组到第二级。
然后你可以按如下方式循环:
foreach ($matches as $matchgroup) {
$postslug = $matchgroup[0];
}
您仍然需要[0]
才能获得“完全匹配”。如果您的模式包含任何(..)
个群组,则[1]
和[2]
将对应这些群组。