【发布时间】:2019-06-19 20:57:46
【问题描述】:
我有兴趣确定是否在传递给 preg_match() 的模式中使用了命名组。
想象一个场景,其中一个正则表达式模式列表被迭代并传递给 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 中将至少有一个元素。两个最终模式包含一个捕获,但 $matches 在第一种情况下将是一个二元素数组,并且 最后一个三元素数组。
我想知道是否使用了命名组,而不用 grep 模式。我需要知道这一点,因为我想将捕获的文本传递给其他函数。
您可以想象,模式要到运行时才能知道,所以我不能简单地查看匹配中的元素数量。
关于如何解决这个问题的任何想法?
感谢您的宝贵时间。
【问题讨论】:
标签: php preg-match