我有兴趣确定在传递给preg_match()的模式中是否使用了命名组。如何判断在传递给preg_match()的模式中是否使用了PREG命名组?
想象一下,将正则表达式模式列表迭代并传递到preg_match()中的场景。类似以下内容:
$trg = "123abc/4";
$patterns = array('/abc/', '/abc\/(\d+)/', '/abc\/(?P<id>\d+)/');
foreach ($patterns as $p) {
preg_match($p, $trg, $matches);
if (len($matches) > 0) {
// Do something interesting with the capture
}
}
如果找到匹配项,则$ matches中将至少有一个元素。两个最终模式包含一个捕获,但$匹配将是第一种情况下的两个元素数组,最后一个是三元素数组。
我想知道,如果使用命名组,则不会使用模式。我需要知道这一点,因为我想将捕获的文本传递给其他函数。你可以想象,模式直到运行时才会被知道,所以我不能简单地看看匹配中的元素数量。
有关如何解决此问题的任何想法?
谢谢你的时间。
感谢您的代码。我认为令人遗憾的事实是,在这种情况下,PHP有点不足,需要一些手持。伊克。 – jjohn 2010-12-13 14:44:22