Вывод состоит из двух важных частей: компиляция шаблона и сопоставление во время выполнения.
Первая часть описывает узлы, из которых три, в скомпилированном автомате.
STAR(n)
соответствует нулю или более следующих узлов и продолжается через узел n .
REG_ANY
соответствует любому символу, кроме новой строки (, т.е. , /./
)
END
отмечает конечное состояние автомата.
MBOL
соответствует началу строки в режиме многострочного соответствия, , т.е. , /^/m
. Это неявно из-за .*
в начале вашего паттерна. (Помните: квантификаторы регулярных выражений по умолчанию жадные.)
Минимальная длина строки, которая может соответствовать вашему шаблону, равна нулю или пустой строке. (Помните: *
квантификатор всегда завершается успешно!)
Смещения имеют вид
NODENUM:POSITION[LENGTH]
и свяжите узлы с регулярным выражением в вашей программе. В вашем случае .*
(узлы 2 и 1) начинается с первой позиции в вашем шаблоне, и конечное состояние там неявно. Удобные смещения для отладчиков регулярных выражений, , например, , для выделения того, какой подшаблон в настоящее время пытается найти соответствие.
Теперь, когда он скомпилирован, его можно сопоставить, и последняя часть отслеживает выполнение. В разделе Pragmas and Debugging документации perlretut поясняется форма строк, описывающих ход матча:
Каждый шаг имеет форму n <x> <y>
, с <x>
соответствующей частью строки и <y>
частью, еще не соответствующей.
Соответствие в вашем вопросе начинается без использованного текста, затем .*
соответствует a
, и шаблон соответствует успешно.
Область действия eval - это механизм, связанный с исполняемым кодом в регулярных выражениях , который вы не используете.
Раздел Отладка регулярных выражений документации perldebguts предоставляет дополнительную справочную информацию и, как всегда, использует источник, Люк!