代码之家  ›  专栏  ›  技术社区  ›  Ross Johnston

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

  •  3
  • Ross Johnston  · 技术社区  · 15 年前

    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 regex工具?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Ross Johnston    15 年前

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

    正确的表达式是:

    expect -re "ITPKT.*\\+(\[0-9])" {...}
    
        2
  •  2
  •   donlibes    15 年前

    我会坚持使用双引号,我发现这样更简单,因为这样就可以进行变量替换。不管怎样,我相信问题在于regexp引擎将“+”解释为“一个或多个”类型的量词,但是您希望引擎在输入中逐字匹配它。

    在“+”号前面需要两个反斜杠(只需在加号前面加一个反斜杠,就可以从Tcl解析器中引用它,这样regexp引擎就可以将它看作一个空的“+”号。)