如何在字符串中找到正则表达式匹配的索引?

时间:2011-09-18 22:59:00

标签: php regex

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

即。我想要像这样运作的东西:

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

1 个答案:

答案 0 :(得分:17)

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以使代码更具代码性,现在不会理所当然地认为该模式肯定会匹配。

<强> See it in action