正则表达式
在编写处理字符串的程序或网页时,经常会有查符合某些复杂规则的字符串的需要,正则表达式就是用于描述这些规则的工具,换句话说,正则表达式就是记录文本规则的代码。
在描述性编成中,QTP将所有的Property Value视为正则表达式。
例如:假设你在一篇英文小说里查hi,你可以使用正则表达式hi。
这是最简单的正则表达式,它可以精确匹配这样的字符串:有两个字符组成,前一个字符是h,后一个是i。
通常,处理正则表达式工具会提供一个忽略大小写的选项,如果选中了这个选项,它可以匹配hi、HI、Hi、hI这四种情况中的任意一种。
但是很多单词包含hi这来那个个连续的字符
\b是正则表达式规定的一个特殊的代码(某些人叫它元字符),代表着单词的开头或结尾,也就是单词的分界处。
假如你要的是hi后而不远处跟着一个luck,你应该用\bhi\b.*\bluck\b
0\d\d-\d\d\d\d\d\d\d匹配这样的字符串
以0开头,然后是两个数字,然后是连字符“-”,最后是8位数字
为了避免那么多烦人的重复,也可以写成:0\d{2}-\d{8}
这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次)
下的工具Regex Tester
元字符举例
\ba\w*\b匹配以字母a开头的单词
显示某个单词开始处\b,然后是字母a然后是任意数量的字母或数字(\w*),最后是单词结束处\b
\d+匹配1个或更多连续的数字
+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次
\b
常用元字符
. 匹配除换行符以为的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
元字符^和$和\b有点类似,都匹配一个位置。^匹配你要用来查的字符的开头,$匹配结尾
这两个代码在验证输入的内容是非常有用,比如要求填写的QQ号必须是5位到12位的数字是,可以使用:^\d{5,12}$
字符转义
如果想查元字符本身,就必须使用\来取消这些字符的特殊意义。因为,应该使用\.和\*。要查\本身,也得用\\
例如:www\.unibetter\匹配 c:\\windows匹配 2\^8匹配
重复
常用的限定符(限定重复次数)
*重复零次或更多次
+重复一次或更多次
?重复零次或1次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
例子:windows\d+ 匹配windows后面跟1个或多个数字
13\d{9} 匹配13后面跟着9个数字(类似中国的手机号)
字符类
之需要在中括号里列出它们就可以:
[aeiou]就匹配任意一个元音字母
[.?!]匹配标点符号(.或?或!)
反义
有时候需要查不属于某个能简单定义的字符类的字符
常用的反义代码
\W匹配任意不是字母、数字、下划线、汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^X]匹配除了X以外的任意字符
[^aeiou]匹配出去这几个字母以外的任意字符
例子:\S+匹配不包含空白符的字符串
<a[^>]+>匹配用尖括号括起来的以a开头的字符串
替换
正则表达式里的替换指的是有几种规则,如果满足其中任意的一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开
0\d{2}-\d{8}|0\d{3}-\d{7}
匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔
\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}
请用替换|把这个表达式扩展成也支持4位区号的
使用替换时顺序问题
\d{5}-\d{4}|\d{5}
匹配替换时,将会从左到右的测试每个分支条件,如果满足了某个分支的话,就不会去管其他的替换条件了
Windows98|windows2000|windowsXP
替换不仅仅能用于两种规则,也能用于多种规则
分组
如果想要重复一个字符串,可以用小括号来指定子表达式(也叫做分组),然后可以指定这个子表达式的重复次数,也可以对子表达式进行其他的一些操作
(\d{1,3}\.){3}\d{1,3}是一个简单的ip地址匹配表达式雏形
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
后向引用
使用小括号指定一个子表达式以后,匹配这个子表达式的文本可以在表达式或其他程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
后向引用用于重复搜索前面某个分组匹配的文本。
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go。首先是一个单词,也就是单词开始出和结束处之间的多于一个的字母或数字(\b(\w+)\b),然后是1个或几个空白符(\s+,最后是前面匹配的那个单词(\1)。
贪婪与懒惰
当正则表达式中包含能够接受重复的限定符(指定数量的代码,例如*,{5,12}等)时,通常的行为是匹配尽可能多的字符
考虑这个表达式:regex匹配a.*b,它将会匹配最长的以a开始,以b结束的字符串。
如果用它来搜索aabab的话,他会匹配整个字符串aabab。这个被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符
只要在表达式后加上一个问号,就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它引用于aabab的话,它会匹配
aab和ab,最先开始的匹配有最大的优先权。
懒惰限定符
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m} 重复n到m次,但尽可能少重复
{n,} 重复n次以上,但尽可能少重复
QTP用户手册中关于正则表达式的内容
使用反斜杠字符(\)
匹配任意单个字符(.)
匹配列表中的任意单个字符([xy])
匹配不再列表中的任意单个字符([^xy])
匹配某个范围内的任意单个字符([x-y])
特定字符的零次或多次匹配(*)
特定字符一次或多次匹配(+)
特定字符零次或一次匹配(?)
对正则表达式进行分组(())
可以用\d来代替[0-9]
\n 换行符
经典正则表达式题目
1. 检查日期:(1[0-2]|0[1-9])[-./](0[1-9]|[12][0-9]|3[01])[-./](dddd)
2. 检查数字:([-+]?[0-9]+\.?[0-9]+)
3. 检查URL:
4. 检查E-mail:\w+@\w+?[.]
5. 匹配非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$
正则表达式对象
Regular Expression (RegExp)Objet
1.如何使用正则表达式
首先生成正则表达式对象
Set regEx=NewRegExp //创建一个正则表达式,固定用法
然后设置正则表达式对象的属性
RegEx.Pattern=Patrn//设置正则表达式的匹配模式
RegEx.IgnoreCase=Ture//设置为不区分大小写
RegEx.Global=True//设置为全局可用,Flase的话反之
最后使用正则表达式的方法来实现需求
RegEx.Replace(string1,string2)
RegEx.Test(string)
RegEx.Execute(string)
2.正则表达式的属性与方法
属性:
Global属性:设置或返回一boolean(布尔)值,该值知名在整个搜索字符串时模式是全部匹配还是只匹配第一个
IgnoreCase属性:设置或返回一个boolean值,指名模式搜索是否区分大小写
Patern属性:设置或返回被搜索的正则表达式模式
方法:
Execute方法:
对指定的字符串执行正则表达式搜索
Object.Execute(String)
参数:
Object:必选项,总是一个RegEx对象的名词
Sring:必选项,要在其上执行正则表达式的文本字符串
说明:
正则表达式搜索的设计模式是通过RegEx对象的Pattern来设置的
Execute方法返回一个Match
Replace方法:
替换在正则表达式查中到的文本
Object.Replace(String1,String2)
参数:
Object:必选项,总是一个
String1:必选项,是将
Test方法:
对指定的字符串执行一个正则表达式搜索,并返回一个boolean值指示是否到匹配的模式
Object.Test(String)
参数:
Object:
String:必选项,要执行正则表达式搜索的文本字符串
实例:简单的字母搜索,Test方法
定义变量及初始化
Dim a,b,c
a=”mooooooooon”
b=”mo*n”
正则表达式以及执行搜索
Set myReg=New RegExp//生成正则表达式对象
myReg.Pattern = b//设置正则表达式公式,必须句
myReg.IgnoreCase=True//忽视大小写,非必须句
myReg.Global=Ture//设置为全局可用,非必须句
c=myReg.Test(a) //执行搜索,如果在a中搜索到b,则返回T
faulse//报告执行结果
if c then
Reporter.ReportEvent 2,“测试结果”,“a中包括b”
Reporter.ReportEvent 1,“测试结果”,“a中不包括b”
End if
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论