Expect(TCL)中的模式匹配如何工作(没有-re标志)?

时间:2012-06-11 05:10:03

标签: tcl expect

假设我得到了这个字符串:100:~#100:~/tmp

这实际上意味着,我需要匹配机器的终端提示符(可能包含或不包含路径)。通常,使用此正则表达式模式:

100:(~|/)(/+[a-zA-Z0-9]*)*#

适用于输入字符串,例如:100:~/foo/bar/foo/baz#

您可以在此处进行测试:Regex Pal

但是在TCL中使用Expect,我必须添加-re来匹配这种模式。但是,我不被允许这样做。我在没有正则表达式的情况下尝试了上述模式,但它失败了。

匹配100:~#100:~/tmp的当前模式非常简单:100:[~/]*#,我被告知它是匹配字符串的shell表达式,而不是正则表达式。 100:[~/]*#模式表示它匹配100:[~/]~/是可选的)和#之间的任何内容。 *字符用于匹配任何内容,而不是传统正则表达式中为零或更多的常规*

Expect with -re标志中的模式匹配表达到底是什么?

1 个答案:

答案 0 :(得分:4)

它们被称为“glob”模式。它们是在shell的模式匹配后设计的。文档在这里:http://tcl.tk/man/tcl8.5/TclCmd/string.htm#M40

  

* 的   匹配字符串中的任何字符序列,包括空字符串。

     

吗?的   匹配字符串中的任何单个字符。

     

[字符 的   匹配 chars 给出的集合中的任何字符。如果 x-y 形式的序列出现在字符中,则 x y 之间的任何字符都将匹配。与-nocase一起使用时,范围的终点将首先转换为小写。 {[A-z]}匹配区分大小写时匹配“_”,而“_”位于“Z”和“a”之间,{ {1}}这被视为{-nocase}(可能首先意味着什么)。

     

\ X 的   匹配单个字符 x 。这提供了一种避免对模式中的字符[A-Za-z]进行特殊解释的方法。