我正在使用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),并且它将在内部用于匹配。
对此事有任何帮助吗?
答案 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之间的任意数字位数,并且应符合有限标准。