我阅读了一个 TCL 测试脚本,它使用 EXPECT。其中一些代码如下:
expect ".*hello.*yes.*morning.*"
通配符“*”可以匹配任何内容,但是在它前面加上“.”又代表什么意思呢?想要匹配哪种模式呢?
expect
命令的默认匹配风格是-glob
,因此那些点实际上是字面上的点。有关Glob样式匹配的帮助可以在string match
文档中找到。expect -re ".*hello.*yes.*morning.*"
在正则表达式中,* 不是通配符,而是 . 才是。. 后面的 * 表示前一个字符/字符类出现 0 次或多次。因此,在这里它表示:任意符号的 0 或多个重复。还需要注意的是,根据正则表达式选项,. 通常不包括换行符。
\
。这里是一个关于Tcl的特定信息的Tcl Wiki页面:http://wiki.tcl.tk/396 - Herbert Sitz*
在正则表达式中不是通配符。你可能想到的是带有文件名通配符的shell操作,但这并不是*
在正则表达式中的工作方式。它们是完全不同的东西。在你的正则表达式中,.
匹配任何字符,然后*
表示“匹配前面的字符0次或多次”。
以下是一些关于正则表达式的信息: http://www.regular-expressions.info/tutorial.html
这里还有一个页面直接解决了正则表达式新手可能会遇到的正则表达式和shell文件名匹配模式之间的混淆: