Я знаю, как использовать preg_match и preg_match_all, чтобы найти фактические совпадения шаблонов регулярных выражений в заданной строке, но функция, которую я пишу, нуждается не только в тексте совпадений, но и в том, чтобы перемещаться по строке ВОКРУГ матчей. ,
Поэтому мне нужно знать положение совпадения в строке, основанное на шаблоне регулярных выражений.
Я не могу найти функцию, похожую на strpos (), которая позволяет regex … любые идеи?
Вы можете использовать флаг 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.