脚本语言是一种编程语言控制软件应用程序。脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译,是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。在个人工作中,接触脚本语言的机会非常多,在测试领域脚本语言的特点和应用在很多测试工具使得我们要学会写脚本用例.自动化测试中匹配字符是关键一环,所以作为一个已经自我培训完测试理论的测试工程师,需要学习下正则表达式.
正则表达式:在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。以下是一些概念介绍:
元字符:例如\d是元字符,匹配一位数字(0,或1,或2,或……)。-不是元字符,只匹配它本身——连字符(或者减号,或者中横线,或者随你怎么称呼它)
字符转义:如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\
分枝条件:类似C语言的或,用|.
分组:你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作(后面会有介绍)。
反义:有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义
后向引用:使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
贪婪与懒惰:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配.有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。
实战(以TCL脚本为例子):
TCL中的正则表达式的一个命令:
regexp?switches?exp string?matchVar? ?subMatchVar subMatchVar ...?在字符串中使用正则表达式匹配。
例子:获取Ip地址
% set IpAddress "The Address is 196.123.66.32,Thank you"
The Address is 196.123.66.32,Thank you
% regexp -all {((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
} $IpAddress IAonly
1
% puts $IAonly
196.123.66.32
首先赋值给IpAddress一个含有ip地址的一句话,然后通过regexp命令来匹配ip地址: IP地址的组成特点,250—255、200—249、0—199,这三种情况可以分开考虑,最简单的是250—255,用正则可以写成:25[0-5];200—249可以这样写:2[0-4]\d;0—199需要分拆成0—9、10—99、100—199,这样分开考虑,就得到了三个式子:\d、\d\d(有重复)、1\d\d,这三个式子我们可以像合并同类项一样把它们合并到一起:[01]?\d?\d。得到了一段数字的正则表达式:25[0-5]|2[0-4]\d|[01]?\d?\d,后三段每段数字之前都有一个“.”号,合并起来考虑,前三段数字可以写到一起:(25[0-5]|2[0-4]\d|[01]?\d?\d)\.,然后单独写第四段数字:25[0-5]|2[0-4]\d|[01]?\d?\d