2012-06-11 22 views
0

假设我预计这个字符串:100:~#100:~/tmpExpect(TCL)中的模式匹配如何工作(不带-re标志)?

这实际上意味着,我需要匹配的终端提示输入机器(这可能会或可能不会包含路径)。通常情况下,这个正则表达式:

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

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

你可以在这里进行测试:Regex Pal

但TCL使用expect,我要补充-re以匹配这种模式。但是,我不能这样做。我尝试了上述模式,没有正则表达式,并且失败了。

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

究竟是什么样的模式匹配表达式在预计与-re标志?

回答

4

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

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

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

[字符] 匹配在通过字符给出的集合中的任何字符。如果形式为x-y的序列出现在字符中,则在xy(含)之间的任何字符都将匹配。当与-nocase一起使用时,范围的端点将首先转换为小写。鉴于{[A-z]}匹配区分大小写时(因为“_”属于“Z”和“a”)匹配“_”,而-nocase这被认为是类似于{[A-Za-z]}(可能首先是什么意思)。

\ X 匹配单一字符X。这提供了避免对模式中的字符*?[]\的特殊解释的方式。

+0

在glob模式中'*'和REs中的'。*'完全一样,'?'和RE中的'.'相似。字符集是相似的(虽然RE有它们的扩展版本),反斜杠比RE更简单。 –