期望(语言)“无法编译正则表达式模式:量词操作数无效”错误

时间:2010-07-28 23:29:39

标签: expect

我遇到了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会尝试评估(因此'['被转移到上面),而我没有收到'无效命令'错误,所以我想我已经过了那个阶段。

但现在我一直坚持为什么这个表达式不能编译: - /

如果没有直接回答,有没有人知道任何可以帮我调试的Expect正则表达式工具?

2 个答案:

答案 0 :(得分:4)

原来我需要逃脱'+'前面的逃跑!

正确的表达方式是:

expect -re "ITPKT.*\\+(\[0-9])" {...}

答案 1 :(得分:2)

我会坚持使用双引号,我发现它更简单,因为那时你可以做变量替换。无论如何,我认为问题是正则表达式引擎将“+”解释为“一个或多个”类型量词,但是你希望引擎在输入中按字面意思匹配。

在“+”符号前需要两个反斜杠。 (只需在加号前面加一个反斜杠就可以从Tcl解析器中引用它,这样正则表达式引擎会将其视为一个简单的“+”符号。)