Как получить положение совпадения с регулярным выражением в строке? - PullRequest
35 голосов
/ 05 марта 2012

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

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

Кажется, я не могу найти функцию, аналогичную strpos (), которая позволяет выполнять регулярные выражения ... есть идеи?

Ответы [ 3 ]

72 голосов
/ 05 марта 2012

Вы можете использовать флаг 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,
  ),
)
5 голосов
/ 05 марта 2012

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

0 голосов
/ 05 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...