Perl Regular Expression - Что означает модификатор gc?

У меня есть регулярное выражение, которое соответствует некоторому тексту как:

$text =~ m/$regex/gcxs

Теперь я хочу знать, что означает модификатор 'gc':

Я искал и обнаружил, что gc означает "Разрешить продолжение поиска после сбоя / совпадения g".

Это мне не понятно. Что означает продолжение поиска?

Насколько я понял, это означает, что начинать сопоставление нужно с самого начала, если поиск /g не удался. Но не соответствует ли модификатор /g всей строке?

2 ответа

Решение

/g Модификатор используется для запоминания "позиции в строке", чтобы вы могли постепенно обрабатывать строку. например

my $txt = "abc3de";
while( $txt =~ /\G[a-z]/g )
{
    print "$&";
}
while( $txt =~ /\G./g )
{
    print "$&";
}

Поскольку позиция сбрасывается при неудачном совпадении, вышеприведенное будет выводить

abcabc3de

/c флаг не сбрасывает позицию при неудачном совпадении. Так что, если мы добавим /c к первому регулярному выражению, как так

my $txt = "abc3de";
while( $txt =~ /\G[a-z]/gc )
{
    print "$&";
}
while( $txt =~ /\G./g )
{
    print "$&";
}

Мы заканчиваем с

abc3de

Пример кода: http://ideone.com/cC9wb

В perldoc perlre http://perldoc.perl.org/perlre.html

Глобальное сопоставление и сохранение текущей позиции после неудачного сопоставления. В отличие от i, m, s и x, эти два флага влияют на то, как используется регулярное выражение, а не на само регулярное выражение. См. Использование регулярных выражений в Perl в perlretut для дальнейшего объяснения модификаторов g и c.

Указанная ссылка приводит к:

http://perldoc.perl.org/perlretut.html

Этот URI имеет подраздел, озаглавленный "Глобальное соответствие", который содержит небольшой учебник / рабочий пример, в том числе:

Неудачное совпадение или изменение целевой строки сбрасывает позицию. Если вы не хотите, чтобы сброс позиции после сбоя совпадал, добавьте // c, как в / regexp / gc. Текущая позиция в строке связана со строкой, а не с регулярным выражением. Это означает, что разные строки имеют разные позиции, и их соответствующие позиции могут быть установлены или считаны независимо.

HTH Ли

Другие вопросы по тегам