51Testing软件测试论坛

标题: 正则表达式匹配“2008年01月” [打印本页]

作者: kursk    时间: 2008-3-10 15:53
标题: 正则表达式匹配“2008年01月”
今天遇到一件怪事,有关正则表达式匹配的,问题虽然解决,但是道理有点解释不通,大家一起看看

一个网页元素上有“2008年01月”这段字符串,我使用正则表达式匹配它

开始我这么写
...object("innetext:="&"2008"&".*"&"01"&".*").....
但是总是找不到

在半天不思其解以后,突然灵机一动,改为
...object("innetext:="&"2008"&".*"&"01"&"年").....
可以匹配

再改为
...object("innetext:="&"2008"&".*"&"01"&".").....
就可以匹配了

与原来相比,就是少一个*
*匹配前导字符零个或多个,就是没有一个,因此不能匹配"月"

但是中间的“年”怎么就可以呢?怎么能用“.*”来匹配呢?这就解释不通了。我左思右想不得其解
大家来讨论一下吧
作者: hsjzfling    时间: 2008-3-10 17:00
.*可以用来匹配任意多个字符~问题的关键是你最开始写...object("innetext:="&"2008"&".*"&"01"&".*").....的时候报了什么错~
如果是报...match one or more...则就是对象不唯一,即还存在innertext为2008年01月......的对象~
作者: kursk    时间: 2008-3-11 08:38
...object("innetext:="&"2008"&".*"&"01"&".*").....找不到对象,也就是根本和2008年01月根本不匹配
作者: hsjzfling    时间: 2008-3-11 10:13
真的不匹配么,别太武断哦,建议多查看帮助文档~~~以下代码会告诉你究竟是否匹配~~
Function RegExpTest(patrn, strng)
  Dim regEx, retVal        
  Set regEx = New RegExp     
  regEx.Pattern = patrn        
  regEx.IgnoreCase = False     
  retVal = regEx.Test(strng)      
  Set regEx=Nothing
  RegExpTest=retVal
End Function
MsgBox(RegExpTest("2008.*01.*", "2008年01月"))
作者: kursk    时间: 2008-3-12 09:52
应该是不匹配,我用下面的代码检验的
if ...object("innetext:="&"2008"&".*"&"01"&".*").exsit(3)
msgbox("good")
else
msgbox("bad")
end if

总是bad
你说的这个函数采用的是VBS的RegExp正则表达式匹配引擎,不是QTP的,你怎么知道两个是完全一样的呢?
作者: jimmyzhou    时间: 2008-3-12 12:20
LZ可以尝试在月后边随便加个字符,看使用.*能否匹配到。
作者: hsjzfling    时间: 2008-3-12 14:03
所以说让你多看看帮助文档~该函数就是在QTP的帮助文档中找的,一个字母都没改~
若你觉得这个还不够爽,那可以用object.ChildObjects方法,看看用你的描述能够找到几个对象~




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2