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

Ros*_*ton 4 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
Run Code Online (Sandbox Code Playgroud)

我想从行中的“+6”中取出“6”:

ITPKT.hg0       :                     6                  +6
Run Code Online (Sandbox Code Playgroud)

我正在使用这个正则表达式:

ITPKT.*\+(\[0-9])
Run Code Online (Sandbox Code Playgroud)

但是当我运行脚本时出现错误:

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;
   }"
Run Code Online (Sandbox Code Playgroud)

我读到某些字符需要转义,否则 Expect 将尝试评估(因此上面的“[”被转义),并且我没有收到“无效命令”错误,所以我认为我已经过去了那个阶段。

但现在我对为什么这个表达式无法编译感到困惑:-/

无法直接回答,有谁知道任何 Expect 正则表达式工具可以帮助我调试这个吗?

Ros*_*ton 5

原来我需要转义“+”前面的转义!

正确的表达是:

expect -re "ITPKT.*\\+(\[0-9])" {...}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果将表达式括在花括号中,则不必转义转义。这里的问题是,使用双引号时,解释器会在expect命令看到它之前进行替换。使用大括号,表达式将逐字传递给expect 命令。 (3认同)