Как получить позицию соответствия регулярного выражения в строке?

Я знаю, как использовать preg_match и preg_match_all, чтобы найти фактические совпадения шаблонов регулярных выражений в заданной строке, но функция, которую я пишу, нуждается не только в тексте совпадений, но и в том, чтобы перемещаться по строке ВОКРУГ матчей. ,

Поэтому мне нужно знать положение совпадения в строке, основанное на шаблоне регулярных выражений.

Я не могу найти функцию, похожую на strpos (), которая позволяет regex … любые идеи?

Solutions Collecting From Web of "Как получить позицию соответствия регулярного выражения в строке?"

Вы можете использовать флаг PREG_OFFSET_CAPTURE для этого:

 preg_match('/(bar)/', 'Foobar', $matches, PREG_OFFSET_CAPTURE); var_export($matches); 

Результат:

 array ( 0 => array ( 0 => 'bar', 1 => 3, // <-- the string offset of the match ), 1 => array ( 0 => 'bar', 1 => 3, ), ) 

preg_match имеет необязательный флаг, PREG_OFFSET_CAPTURE , который записывает строковое положение совпадения в исходной «стоге сена». См. Раздел «флаги»: http://php.net/preg_match

С помощью PREG_OFFSET_CAPTURE на preg_match () вы получите количество раз по совпадениям по шаблону. Когда есть совпадение, это будет иметь значение смещения, которое начинается с 0.

Используя это значение, вы можете снова вызвать preg_match, используя параметр offset.