Ошибка Expect (the language) "не удалось скомпилировать шаблон регулярного выражения: операнд квантификатора недействителен" - PullRequest
3 голосов
/ 29 июля 2010

У меня проблемы с регулярным выражением Expect.

Я пытаюсь сопоставить этот вывод:

RUC.hg0         :                     6                  +6
ITPOK.hg0       :                     6                  +6
ITUC.hg0        :                     6                  +6
ITPKT.hg0       :                     6                  +6
IT127.hg0       :                     6                  +6
ITBYT.hg0       :                   456                +456
IR127.hg0       :                     6                  +6
IRPKT.hg0       :                     6                  +6
IRUC.hg0        :                     6                  +6
IRPOK.hg0       :                     6                  +6
IRBYT.hg0       :                   456                +456
IRJUNK.hg0      :                     1                  +1

Я хочу вытащить «6» из «+6» в строке:

ITPKT.hg0       :                     6                  +6

Я использую это регулярное выражение:

ITPKT.*\+(\[0-9])

Но я получаю сообщение об ошибке при запуске сценария:

couldn't compile regular expression pattern: quantifier operand invalid
    while executing

"expect -re "ITPKT.*\+(\[0-9])" { 
       puts "$expect_out(1, string)";
       set snt $expect_out(1, string); 
       set sent 1;
   }"

Я читал, что некоторые символы должны быть экранированы, или Expect попытается выполнить оценку (следовательно, '[' экранируется выше), и я не получаю ошибку 'invalid command', поэтому я думаю, что мы прошли этот этап.

Но теперь я застрял на том, почему это выражение не скомпилируется: - /

Если прямой ответ не получен, кто-нибудь знает какие-нибудь инструменты Expect regex, которые могут помочь мне отладить это?

Ответы [ 2 ]

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

Оказывается, мне нужно было сбежать перед «+»!

Правильное выражение:

expect -re "ITPKT.*\\+(\[0-9])" {...}
2 голосов
/ 28 августа 2010

Я бы придерживался двойных кавычек, я обнаружил, что это проще, потому что тогда вы можете делать подстановку переменных.В любом случае, я считаю, что проблема заключается в том, что механизм регулярных выражений интерпретирует символ «+» как квантификатор типа «один или несколько», но вы хотите, чтобы механизм совпадал с ним буквально во входных данных.

Перед двумязнак «+».(Просто поместите одну обратную косую черту перед знаком плюс в кавычках из анализатора Tcl, чтобы механизм регулярных выражений воспринимал его как «+»).

...