在php中,找到并捕获所有与给定正则表达式匹配的子字符串相对简单,但是否有一种简单的方法来查找字符串中第一个正则表达式匹配项的索引位置?
也就是说,我想要像这样运行的东西:
$str = "123456789abcdefgh";
$index = preg_index("#abcd#", $str);
// $index == 9
使用 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
,使代码更加可读,现在不会认为模式一定会匹配。
strpos()
吗? - Jared Farrishstrpos()
只能进行字符串匹配,不能进行正则表达式匹配,虽然你可以在匹配上使用它,但这似乎有些愚蠢。 - Daniel Beardsley