假设我得到了这个字符串: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
标志中的模式匹配表达到底是什么?
答案 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]
进行特殊解释的方法。