size = 3 matrix_surprise = [[0] * size] * size matrix = [[0]*size for i in range(size)]
[/g1]
Группа, определенная (..)
, является группой 1. Конец квантора +
повторяет его. Каждый раз, когда движок может повторять группу (совпадающие с двумя символами), группа 1 перезаписывается.
aa
в группу 1 bb
до группы 1 cc
в группу 1. Когда вы проверяете группу 1, двигатель возвращает cc
. Все остальные записи потеряны.
(Исключением является механизм .NET, который также возвращает cc
, а также позволяет проверять промежуточные захваты благодаря объекту CaptureCollection. Он будет содержать aa
, bb
и cc
.)
С помощью (..)+(...)
, почему группа 1 содержит aa
? Откат!
Чтобы понять это, нам снова нужно следовать по пути движка регулярного выражения.
aa
в группу 1 (..)
и фиксирует bb
в группе 1 (..)
и захватывает cc
в группу 1 (...)
. Он терпит неудачу: нет никаких символов, оставшихся для потребления. +
означает один или несколько раз, и мы сопоставили ..
три раза, поэтому мы можем дать один или даже два. На этом этапе двигатель отказывается от последнего совпадения количественной группы (..)+
, которая является cc
. Мы вернулись, когда группа 1 была bb
. (...)
. Осталось всего два символа: cc
, поэтому он снова не работает. (..)+
, которая является bb
. На этом этапе группа 1 снова aa
. (...)
. Успешно: группа 2 - bbc
, а группа 1 - aa
Ссылка
(..)+(...)
. Также настоятельно рекомендуем прочитать «Сведения о горах». статья связана. :) – zx81 21 July 2014 в 03:52