正则表达式
一、正则表达式介绍:
正则表达式是用某种模式去匹配一类字符串的公式 。
在自动化的测试过程中经常需要对文本数据进行查,对字符串进行比较匹配等,这个时候就需要用到正则表达式
元字符 | 说 明 |
. | 匹配任何单个字符 |
[xyz] | 匹配括号中的任何一个字符 |
[^xyz] | 匹配除了括号中的任何一个字符 |
[x-y] | 匹配括号中字符区间内的任何一个字符 |
* | 匹配0或多个正好在它之前的那个字符 |
+ | 匹配1或多个正好在它之前的那个字符 |
? | 匹配0或1个正好在它之前的那个字符 |
() | 将(和)之间的表达式定义为“组” |
| | 将多个匹配条件进行逻辑“或”运算 |
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结束位置 |
\w | 匹配任何字母数字字符和下划线 |
\W | 匹配任何非字母数字字符 |
\ | 用来将这里列出的这些元字符当作普通的字符来进行匹配 |
{} | 匹配指定数目的字符 |
二、正则表达式特征
匹配任何单个字符(.)
.匹配任何单个字符。例如正则表达式“…”匹配“12B”,“B3B”,“123”,“ABC”,“$g%”等。
匹配括号中的任何一个字符([xyz])
匹配方括号中的任何一个字符。例如正则表达式“[abc][12]”匹配“a1”,“a2”,“b1”,“b2”,“c1”和“c2”。
匹配除了括号中的任何一个字符([^xyz])
这里的”^” 用法是“排除”,匹配除了指定区间之外的字符。例如“[^a][12]”与“a1”和“a2”不匹配,但是可以匹配“11”,“12”,“c1”等。
匹配括号中字符区间内的任何一个字符([x-y])
[d-h]结构的正则表达式将匹配在d到p之间的任何一个字符。例如“[abcdef][123]”可以写出“[a-f][1-3]”
匹配0或多个正好在它之前的那个字符(*)
“*”用于匹配0或多个正好在它之前的那个字符。例如“a*”可以匹配“a”,“aa”,“aaa”等,正则表达式“.*”意味着能够匹配任意数量的任何字符。请看另外的一些例子:
“aa*”可匹配“a”,“aa”,“aaa”等;
“[abc][1-4]*”可匹配“a”,“b”,“c”,“a1”,“b1”,“a12”,“a1234344”等;
“User.*”可匹配任何以“User”开头的字符串。
*******************************************************************************
注意:很多人会有这样的错误,用“User*”匹配以“User”开头的字符串,而“User*”只匹配像“Use”,“User”,“Userr”等
*******************************************************************************
匹配1或多个正好在它之前的那个字符(+)
regex匹配
“+”用于 匹配1或多个正好在它之前的那个字符。例如“aa*”可以等同于“a+”。
“123+”可匹配“123”,“1233”,“1233”等;
“[123]+”可匹配“1”,“2”,“3”,“12”,“23”等
匹配0或1个正好在它之前的那个字符(?)
“?”用于匹配0或1个正好在它之前的那个字符。例如“a[123]?”可匹配“a”,“a1”,“a2”和“a3”。
正则表达式分组(())
用括号“()”组成一个正则表达式。例如(123)+匹配“123”,“123123”,“123123123”等,与“123+”的含义是不一样的。
匹配多个表达式中的一个(|)
“|”符号是指进行逻辑“或”运算。例如“(123)|(abc)”可以匹配“123”或“abc”。
匹配输入字符串的开始位置(^)
“^”符号在正则表达式的开头用于匹配一行的开始。例如“^abc.*”能够匹配以“abc”开始的字符串。
匹配输入字符串的结束位置($)
“$”符号在正则表达式的末尾用于匹配一行的结束。例如“abc$”能够匹配“abc”,“123abc”,“aabc”等,而“^abc$”只能匹配“abc”。
匹配任何字母数字字符和下划线(\w)
“\w”可匹配任何字母数字和下划线。这个用法与表达式“[A-Za-z0-9_]”是一样的。例如“\w\w”能够匹配“A_”,“a1”等。
匹配任何非字母数字字符(\W)
“\W”可匹配任何非字母和非数字的字符,是与“\w”相反的,它可以等同于“[^A-Za-z0-9]”。例如“\W”可以匹配“$”,“%”,“@”等。
转义字符(\)
。。
匹配指定数目的字符({})
“{}”匹配X个正好在它之前的那个字符。使用这个符号有多种方法,见表13-2
表13-2
字符 | 说明 | 举例 |
{M} | M个匹配的模式 | A{2}仅可以匹配“AA” |
{M,} | M个或更多个匹配的模式 | A{1,}可以匹配“A”,“AA”等,这个表达式等同于“A+”,“A{0}”等同于“A*” |
{M,N} | 至少M个且至多N个匹配的模式 | A{1,3}可以匹配“A”,“AA”和“AAA” |
其他正则表达式字符
虽然在QTP的用户手册中没有列举所有的正则表达式字符,但是它支持所有的VBScript正则表达式字符。下面表13-3中列出了其他的一些正则表达式符号。
表13-3
字符 | 说明 | 举例 |
\d | 匹配0到9的任意数字,等同于“[0-9]”. | “\d{2}”可以匹配01到99的所有数字,但是它不匹配1到9的单数 |
\D | 匹配任意的非数字字符,等同于“[^0-9]”. | “\D”可以匹配“A”,“&”,“$”等 |
\num | 匹配num次,其中num是一个正整数, | “(\d)\|\|”will match numbers”111”,”222”,”333” |
举例:
1、
/[A-Z]/
将会与从A到Z范围内任何一个大写字母相匹配。
/[a-z]/
将会与从a到z范围内任何一个小写字母相匹配。
/[0-9]/
将会与从0到9范围内任何一个数字相匹配。
/([a-z][A-Z][0-9])+/
将会与任何由字母和数字组成的字符串。
/[A-Z]/
将会与从A到Z范围内任何一个大写字母相匹配。
/[a-z]/
将会与从a到z范围内任何一个小写字母相匹配。
/[0-9]/
将会与从0到9范围内任何一个数字相匹配。
/([a-z][A-Z][0-9])+/
将会与任何由字母和数字组成的字符串。
2、问题:能够匹配如下三个字符串的正则表达式是什么?
“test.app”,”qa.app”,”www.app”
答:(test|qa|www)\.app\
3、问题:用以匹配日期型MM/DD/YY的正则表达式如何写?
答:MM是1-12的数字,可以分成两部分,一部分是:0-9一部分是两位的10,11,12
[0-9]|1[0-2],
DD是1-31的数字,可以分成三部分一部分是0-9一部分是10-19,一部分是20-29
一部分是30-31,可以这样写[0-9]|1[0-9]|2[0-9]|3[0-1]或[1-9]|[1-2][0-9]|3[0-1]
YY的正则表达式则是“[0-9][0-9]”。
组合起来日期型的正则表达式就是“([1-9]|1[0-2])/( [1-9]|[1-2][0-9]|3[0-1])/([0-9][0-9])”。
三、在QTP中使用正则表达式
'为文本框创建一个Description对象
Set oTextBox = Description.Create
'此正则表达式匹配以name的值
oTextBox("name").value = "name.*"
'此属性默认的情况下市true,所以可以忽略此行代码
oTextBox("name").RegularExpression = True
'访问name属性以那么开头的第一个文本框
oTextBox("index").value = 0
'Set the value of the text box
Browser("").Page("").WebEdit(oTextBox).Set "Value"
四、正则表达式的实际应用
4.1描述性编程中的应用
正常的测试判断脚本:
If Browser("PetShop").Page("PetShop").WebArea("Fish").Exist then
…
End if
百度例1:
systemutil.Run "","www.baidu/"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论