Гипотеза об ответе.
Учитывая строку ввода ab
, оба значения (.)(.)
и (.)(.)$
будут соответствовать ab
с одинаковой длиной из 2. Таким образом, как Вы говорите в своем вопросе, что два регулярных выражения совпадают с одинаковой длиной из одной и той же начальной точки.
Однако я бы сказал, что в момент совпадения (.)(.)
с ab
двигатель будет иметь один дополнительная проверка (против $
), чтобы проверить, совпадает ли (.)(.)$
(то есть, совпадает ли она в EOL), и в этом случае последнее регулярное выражение не будет предпочтительным в любом случае , потому что оно имеет ту же длину и начался в той же точке, что и прежнее регулярное выражение, которое уже было найдено. Поэтому для меня имеет смысл, что движок возвращает ссылки на группы в (.)(.)
без $
.
Я думаю, что мои рассуждения подразумевают, что сопоставление является жадным по отношению к печатным символам, но ленивым по отношению к не -печатаемые.
Сравните / сопоставьте с этим:
echo ab|sed -r 's/^(.)(.)|(.)(.)/\2\1\3\4/'
ba
echo ab|sed -r 's/(.)(.)|^(.)(.)/\2\1\3\4/'
ba
, где крайнее левое регулярное выражение совпадает в обоих случаях.