Ответы здесь верны, я просто попытаюсь представить их в более последовательной форме:
Совпадение всегда начинается слева
Движок регулярных выражений всегда запускается слева отстроки и предпочитает крайнее левое совпадение по сравнению с более длинными совпадениями
*
совпадения с пустыми строками
совпадения регулярного выражения a*
могут совпадать со строками ''
, 'a'
, 'aa'
и т. д. Он всегда предпочитает самое длинное совпадение, которое находит, но не может найти совпадение длиннее пустой строки, он просто сопоставляет пустую строку.
Соединение вместе
В 'abc' ~~ /a*/
двигатель регулярного выражения запускается в позиции 0, a*
соответствует как можно большему количеству а и, таким образом, соответствует первому символу.
В 'babc' ~~ /a*/
двигатель регулярного выражения запускается в позиции0, а a*
может соответствовать только нулевым символам.Это делает это успешно.Так как общий матч проходит успешно, нет причин пытаться снова в позиции 1.