Как найти индекс регулярного выражения в строке?

В php довольно просто найти и захватить все подстроки, которые соответствуют заданному регулярному выражению, но есть ли простой способ найти индекс первого совпадения регулярных выражений в строке?

т.е. я хотел бы что-то, что работает следующим образом:

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

Solutions Collecting From Web of "Как найти индекс регулярного выражения в строке?"

Используйте флаг 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 чтобы сделать код более презентабельным, теперь не считается само собой разумеющимся, что шаблон определенно будет соответствовать.

Смотрите в действии .