问题

在php中,找到并捕获与给定正则表达式匹配的所有子字符串相当简单,但有没有一种简单的方法可以在字符串中找到第一个正则表达式匹配的索引?

即我想要这样运行的东西:

 $str = "123456789abcdefgh";
$index = preg_index("#abcd#", $str);
// $index == 9
 

  最佳答案

使用PREG_OFFSET_CAPTURE标志与 preg_match :

 $str = "123456789abcdefgh";
$index = -1;
if(preg_match("#abcd#", $str, $matches, PREG_OFFSET_CAPTURE)) {
    $index = $matches[0][1];
}
 

上面的 [0] 对应于正则表达式内的捕获组,其索引是您想要的(整个表达式的 0,如果存在的话,第一个捕获组的 1 等),而 [1] 是一个固定的索引,如文档所示。

编辑:添加了一个if来使代码更具预设性,现在不认为模式肯定会匹配.

请参阅行动

  相同标签的其他问题

phpregex