Как получить конечную позицию регулярного выражения (PCRE) в PHP? - PullRequest
2 голосов
/ 14 января 2011

Я использовал опциональный параметр matchs с флагом PREG_OFFSET_CAPTURE.Я получаю начальное смещение и соответствующее выражение .... Я не нахожу варианты, чтобы получить конец соответствующего выражения, как в Java Regexes.Есть решение или мое последнее средство: offset + strlen (match_string)?

Ответы [ 4 ]

3 голосов
/ 14 января 2011

Просто поставьте (.) в конце своего регулярного выражения и возьмите захваченное смещение;)

1 голос
/ 14 января 2011

Если PHP похож на Perl, для всех совпадений должно быть несколько массивов смещений.

В Perl его @ - и @ + .. Index 1 .. - смещения группы захвата.Индекс 0 - это общее смещение совпадений.

if ('012345678' =~ /4/ ) {
    print "Match start = $-[0], match end = $+[0]\n";
}

Отпечатки Match start = 4, match end = 5

1 голос
/ 14 января 2011

Вы можете сопоставить \G - это позиция движка регулярных выражений после предыдущего совпадения.

Однако я не нахожу это лучше, чем ваш метод "последнего средства".Что в этом плохого?

0 голосов
/ 05 августа 2012

У меня была похожая проблема, но я не мог использовать

 strlen(matching_string)

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

Вместо этого я использовал preg_replace соответствующую строку и работал оттуда.

Полагаю, это похоже на предложение @NikiC, но мне потребовалось некоторое время, чтобы понять.

Надеюсь, это поможет.

...