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