正则表达式.docx

上传人:b****3 文档编号:4640846 上传时间:2023-05-07 格式:DOCX 页数:15 大小:158.05KB
下载 相关 举报
正则表达式.docx_第1页
第1页 / 共15页
正则表达式.docx_第2页
第2页 / 共15页
正则表达式.docx_第3页
第3页 / 共15页
正则表达式.docx_第4页
第4页 / 共15页
正则表达式.docx_第5页
第5页 / 共15页
正则表达式.docx_第6页
第6页 / 共15页
正则表达式.docx_第7页
第7页 / 共15页
正则表达式.docx_第8页
第8页 / 共15页
正则表达式.docx_第9页
第9页 / 共15页
正则表达式.docx_第10页
第10页 / 共15页
正则表达式.docx_第11页
第11页 / 共15页
正则表达式.docx_第12页
第12页 / 共15页
正则表达式.docx_第13页
第13页 / 共15页
正则表达式.docx_第14页
第14页 / 共15页
正则表达式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

正则表达式.docx

《正则表达式.docx》由会员分享,可在线阅读,更多相关《正则表达式.docx(15页珍藏版)》请在冰点文库上搜索。

正则表达式.docx

正则表达式

正则表达式

一、正则表达式介绍:

正则表达式是用某种模式去匹配一类字符串的公式。

在自动化的测试过程中经常需要对文本数据进行查找,对字符串进行比较匹配等,这个时候就需要用到正则表达式

元字符

说明

.

匹配任何单个字符

[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或多个正好在它之前的那个字符(+)

“+”用于匹配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)\|\|”willmatchnumbers”111”,”222”,”333”

举例:

1、

/[A-Z]/

将会与从A到Z范围内任何一个大写字母相匹配。

/[a-z]/

将会与从a到z范围内任何一个小写字母相匹配。

/[0-9]/

将会与从0到9范围内任何一个数字相匹配。

/([a-z][A-Z][0-9])+/

将会与任何由字母和数字组成的字符串。

2、问题:

能够匹配如下三个字符串的正则表达式是什么?

“”,””,””

答:

(test|qa|www)\.app\.com

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对象

SetoTextBox=Description.Create

'此正则表达式匹配以name的值

oTextBox("name").value="name.*"

'此属性默认的情况下市true,所以可以忽略此行代码

oTextBox("name").RegularExpression=True

'访问name属性以那么开头的第一个文本框

oTextBox("index").value=0

'Setthevalueofthetextbox

Browser("").Page("").WebEdit(oTextBox).Set"Value"

四、正则表达式的实际应用

4.1描述性编程中的应用

正常的测试判断脚本:

IfBrowser("PetShop").Page("PetShop").WebArea("Fish").Existthen

Endif

XX例1:

systemutil.Run"iexplore.exe","

IfBrowser("title:

=.*").Page("title:

=.*").WebArea("src:

=.*/baidu_logo_jr_1004_ysh.gif").Existthen

msgbox"成功"

EndIf

XX例2:

测试需求:

判断XX首页右下角的链接是否以5个字母开头,并且,首字母是大写

[A-Z][a-z][a-z][a-z][a-z]+

systemutil.Run"iexplore.exe","

IfBrowser("title:

=.*").Page("title:

=.*").Link("innertext:

=[A-Z][a-z][a-z][a-z][a-z].*","Url:

=then

msgbox"成功"

EndIf

4.2检查点中的应用

例题:

XX首页,验证XX首页的ICP年度文本一行,是否以©2010格式开头

步骤:

1、把XX首页所有的对象加载到对象库中

2、在XX文本框中输入任意字符(目的,在关键字视图中能看到XX首页,方便在关键字视图中进行操作)

3、在ActiveScreen中选中最下面一行文本

4、点击ok之后,专家视图的脚本如下

systemutil.Run"iexplore.exe","

Browser("title:

=.*").Page("title:

=.*").CheckCheckPoint("XX一下,你就知道")

Browser("PetShop").Page("XX一下,你就知道").CheckCheckPoint("XX一下,你就知道")

5、运行,结果通过

Details

TextCheckpoint:

captured"©2010Baidu使用XX前必读京ICP证030173号"betweenAboutBaiduand

RegularExpression:

ON

Matchcase:

OFF

Exactmatch:

OFF

Ignorespaces:

ON

注:

如果改成@[0-9][0-9][0-9][a-z].*就运行不成功

4.3参数化中的应用

例子:

在人才网输入不同的关键字之后,会列出公司名,或者职位名包含关键字的所有数据,现在把关键字,和匹配的正则参数化,验证以某关键子字搜索之后,列表中的公司名和职位名是否包含关键字。

systemutil.CloseProcessByName("iexplore.exe")

systemutil.Run"iexplore.exe","

Browser("title:

=.*").Page("title:

=.*").Sync

Setdocument=Browser("title:

=.*").Page("title:

=.*").Object

document.GetElementsByName("keyword").item(0).value=datatable("searchkeyword",dtGlobalSheet)

setsearchbuttons=document.GetElementsByTagName("INPUT")

Foreachelementinsearchbuttons

Ifelement.type="image"andelement.alt="搜索职位"Then

element.click

EndIf

Next

Browser("title:

=.*").Page("title:

=.*").Sync

SetoDivs=document.GetElementsByTagName("DIV")

Fori=0tooDivs.length-1

IfoDivs.item(i).innertext="企业招聘信息"Then

Flag=Flag+1

SetmyDiv=oDivs.item(i)

EndIf

Next

IfFlag=1Then

Flag=0'意为何意

SetstrCompanyNameTitleDIV=myDiv.parentNode

IfTrim(strCompanyNameTitleDIV.classname="texttitle")Then

Setmysearchdiv=strCompanyNameTitleDIV.NextSibling

Setmychilddivs=mysearchdiv.ChildNodes

'因为要循环显示所有行的数据,所以要获得所有行的DIV元素,然后循环显示他们

Fori=0tomychilddivs.length-1'所有数据的行数

Iftrim(mychilddivs.item(i).classname)="row"ortrim(mychilddivs.item(i).classname)="rowhl"Then

Flag=Flag+1

'firstchild....是搜索此子节点中的所有子节点,但不包括父节点

strCompanyName=mychilddivs.item(i).firstchild.getElementsbyTagName("DIV").item

(1).innertext

strCompanyContent=mychilddivs.item(i).firstchild.NextSibling.getElementsbyTagName("DIV").item(0).innertext

MergeString=strCompanyName&strCompanyContent

IfRegExpTest(datatable("RegPatten",dtGlobalSheet),MergeString)=trueThen

print"第"&i+1&"行匹配成功此行的标题是"&strCompanyName

Else

print"第"&i+1&"行匹配不成功此行的标题是"&strCompanyName

EndIf

endif

Next

EndIf

EndIf

SetoDIVs=Nothing

Setdocument=Nothing

FunctionRegExpTest(patm,strng)

DimregEx,retVal

SetregEX=NewRegExp

regEx.Pattern=patm

regEx.IgnoreCase=False

retVal=regEx.Test(strng)

IfretValThen

RegExpTest=True

Else

RegExpTest=False

EndIf

EndFunction

4.4RegExp对象

RegExp对象支持正则表达式的使用,RegExp提供了三个属性和方法

属性:

Pattern,Global,IgnoreCase

方法:

Test,Replace,Execute

Pattern:

属性用于描述正则表达式的匹配模式,即正则表达式

IgnoreCase:

属性匹配字符串是否区分大小写,True为不区分大小写

Global:

属性用于搜索过程中是匹配第一个还是全部匹配,false仅匹配第一个

Execute:

用于对指定的字符串执行正则表达式搜索,返回一个matchs集合,其中包含了指定字符串中找到的每个匹配项

对集合里边的任何一个元素使用FirstIndex代表字符在字符串中的位置

Value代表一个元素的值

Test:

方法用于对指定的字符串执行正则表达式搜索,并返回一个布尔值,表示是否找到了匹配模式

Replace:

用于替换在正则表达式中找到的文,结果返回匹配后的字符串

如:

IFregEX.Test(string)=Truethen

MsgboxregEx.Replace(string,”ABC”)

EndIF

例题:

如下可以用来匹配字符串,比用字符串函数更加方便。

FunctionRegExpTest(sPattern,sString,rePattern,replacestring)

DimregExp,Matches,Str,Matcheslast

SetregExp=NewRegExp

regExp.Pattern=sPattern'创建一个正则表达式

regExp.IgnoreCase=True'不区分大小写

regExp.Global=True'设置全局可用,即在整个字符串中进行搜索

SetMatches=regExp.execute(sString)

ForeachMatchinMatches

Str=Str&"在字符串中的位置为:

"&Match.FirstIndex&"值为:

"&Match.Value&vbCrlf

Next

IfregExp.Test(sString)Then'测试表达式是否匹配字符串

sString=regExp.Replace(sString,replacestring)'把所有匹配的字符替换成AB,结果返回匹配后的字符串

msgbox"匹配成功,替换后的文本为"&sString

EndIf

EndFunction

msgboxRegExpTest("is.","IS1is2IS3is4","ab.","AB")

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2