Я не понимаю, как использовать/нужен оператор \G
.
Я читал в perldoc:
Вы используете привязку \G для запуска следующего совпадения в той же строке, где последнее совпадение осталось.
Я не понимаю этого утверждения. Когда мы используем \G
, мы обычно переходим к символу после последнего матча.
Как показывает пример:
$_ = "1122a44";
my @pairs = m/(\d\d)/g; # qw( 11 22 44 )
Затем он говорит:
Если вы используете якорь \G, вы вынуждаете матч после 22, чтобы начать с a:
$_ = "1122a44";
my @pairs = m/\G(\d\d)/g;
Регулярное выражение не может соответствовать, поскольку оно не найти цифру, поэтому следующее совпадение не удастся и оператор соответствия вернется пары, которые он уже нашел
Я тоже этого не понимаю. "Если вы используете якорь \G, вы вынудите матч после 22, чтобы начать с." Но без \G совпадение будет пытаться в a
в любом случае правильно? Так в чем смысл этого предложения?
Я вижу, что в примере единственные пары напечатаны 11 и 22. Поэтому 44 не пробовали.
В этом примере также показано, что с помощью параметра c
он делает индекс 44 после этого.
Честно говоря, из всего этого я не могу понять, в чем польза этого оператора и когда он должен применяться.
Может кто-нибудь, пожалуйста, помогите мне понять это, возможно, с содержательным примером?
Обновление
Я думаю, что я не понял этого ключевого предложения:
Если вы используете якорь \G, вы вынуждаете матч после 22, чтобы начать с a. Регулярное выражение не может соответствовать, поскольку оно не найти цифру, поэтому следующее совпадение не удастся и оператор соответствия вернется пар, которые он уже нашел.
Это означает, что когда совпадение не выполняется, регулярное выражение не предпринимает дальнейших попыток и согласуется с примерами в ответах
Также:
После того, как совпадение завершится неудачей в письме a, perl сбрасывает pos() и следующий совпадение в одной строке начинается с начала.