TCL Регулярное выражение Сомнение - PullRequest
1 голос
/ 28 июля 2010

Согласно моему пониманию RE

-> * означает совпадение 0 или более вхождений prev regex
-> + означает совпадение 1 или более вхождений prev regex

Теперь давайте взглянем на следующие примеры

FIRST: -

% regexp {:+} "DHCP:Enabled" first
1
% puts $first
:                     --> ":" is stored in variable first
%

SECOND: -

% regexp {:*} "DHCP:Enabled" sec
1
% puts $sec
                     --> Nothing is stored in variable second
%

Почему ":" сохраняется дляПЕРВЫЙ а не ВТОРОЙ?

Ответы [ 2 ]

7 голосов
/ 28 июля 2010

Второе регулярное выражение {:*} соответствует пустой строке, потому что пустая строка - 0 вхождений :. Если вы используете опцию -indices для regexp, вы увидите, что она соответствует позиции 0.

 % regexp -indices :* "DHCP:Enabled" indices
 1
 % puts $indices
 0 -1

Другими словами, регулярное выражение совпадает с первым символом и возвращает.

0 голосов
/ 29 июля 2010

Соответствует пустой строке, чтобы сопоставьте эту пустую строку в начале «DHCP:Enabled». Регулярный Двигатель выражения хотел бы подобрать вещи как можно скорее. Чтобы показать, вот интерактивный сеанс:

% regexp -inline {:*} "DHCP:Enabled"
{}
% regexp -inline -all {:*} "DHCP:Enabled"
{} {} {} {} : {} {} {} {} {} {} {}
% regexp -inline -indices -all {:*} "DHCP:Enabled"
{0 -1} {1 0} {2 1} {3 2} {4 4} {5 4} {6 5} {7 6} {8 7} {9 8} {10 9} {11 10}

Опция -inline полезна для простого тестирования, -all соответствует каждое подходящее место, а не только первое, и -indices возвращает местоположения, а не строку.

Обратите внимание, что только один раз (4 4) является концом, по крайней мере, с тем же индексом, что и начало; во всех остальных случаях совпадает пустая строка (и это законно; вы сказали, что ничего не найдено, все в порядке).

В общем, это действительно хорошая идея - убедиться, что ваш общий RE не может соответствовать пустой строке , иначе вы будете удивлены результатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...