4

我在使用 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 正则表达式工具吗?

4

2 回答 2

5

原来我需要在“+”前面逃脱!

正确的表达是:

expect -re "ITPKT.*\\+(\[0-9])" {...}
于 2010-07-28T23:59:14.890 回答
2

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

在“+”号之前需要两个反斜杠。(只需在加号之前放置一个反斜杠,从 Tcl 解析器中引用它,以便正则表达式引擎将其视为裸“+”号。)

于 2010-08-27T20:50:19.633 回答