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

13

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

也就是说,我想要像这样运行的东西:

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

你尝试过strpos()吗? - Jared Farrish
strpos() 只能进行字符串匹配,不能进行正则表达式匹配,虽然你可以在匹配上使用它,但这似乎有些愚蠢。 - Daniel Beardsley
1个回答

24

使用 preg_match 函数时,加上 PREG_OFFSET_CAPTURE 标志:

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

[0]对应于正则表达式中你想要的捕获组的索引(0表示整个表达式,1表示第一个捕获组(如果存在),以此类推)。而[1]是一个固定的索引,如记录所述。

编辑:添加了一个if,使代码更加可读,现在不会认为模式一定会匹配。

在这里看它的运行情况


1
太棒了,正是我正在寻找的答案。 - Daniel Beardsley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接