正则表达式,用于在URL末尾搜索模式的“不存在”

时间:2011-10-05 10:13:12

标签: regex rft

我正在使用Java语言编写Rational Functional Testing(RFT)脚本,我试图在我的对象图中创建一个对象,其正则表达式与某个模式不匹配。

我想要不匹配的网址类似于:

http://AnyHostName/index.jsp?safe=active&q=arab&ie=UTF-8&oe=UTF-8&start=10
http://AnyHostName/index.jsp?safe=active&q=arab&ie=UTF-8&oe=UTF-8&start=40
http://AnyHostName/index.jsp?safe=active&q=arab&ie=UTF-8&oe=UTF-8&start=210

我尝试使用下面的表达式,但由于URL的结尾也是任意数量的两个或更多数字,表达式无法满足需要:

^.*(?<!\start=10)$   or   ^.*(?<!\start=40)$   or   ^.*(?<!\start=110)$

如果我尝试使用\ d +替换上述模式中的数字,表达式将停止正常工作。

注意:值得一提的是,使用任何Java代码是不可能的,因为正则表达式将被赋予工具(即RFT),并且它将在内部用于匹配。

对此事有任何帮助吗?

3 个答案:

答案 0 :(得分:1)

为什么不匹配

^http://AnyHostName/index.jsp?safe=active&q=arab&ie=UTF-8&oe=UTF-8&start=\d+$

(你必须在java中进行转义。)

并添加“!”在你的java if语句?

喜欢if(!m.match())...

答案 1 :(得分:1)

使用此表达式:

^(?:(?!start=\d+).)*$

它的优势在于它还排除了start=10出现在网址中间的情况(即http://AnyHostName/index.jsp?safe=active&q=arab&start=210&ie=UTF-8&oe=UTF-8)。

但是,它可能很慢,因为它正在检查每个角色的负向前瞻。

答案 2 :(得分:0)

根据regular-expressions.info,java背后的外观必须是有限长度的。所以\d+将是无限的。

我不确定,但你可以试试

^.*(?<!\start=\d{1,20})$

此量词{1,20}将允许1到20之间的任意数字位数,并且应符合有限标准。