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