2

我正在使用 Java 语言编写一个 Rational 功能测试 (RFT) 脚本,我试图在我的对象映射中使用不匹配特定模式的正则表达式创建一个对象。

我不想匹配的 URL 看起来像:

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),并将在内部用于匹配。

请问在这件事上有什么帮助吗?

4

3 回答 3

1

使用这个表达式:

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

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

但是,它可能会很慢,因为它正在检查每个字符的负前瞻。

于 2011-10-05T10:28:04.323 回答
1

为什么不只是匹配

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

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

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

比如 if (!m.match())...

于 2011-10-05T10:24:05.567 回答
0

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

我不确定,但你可以试试

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

这个量词{1,20}将允许从 1 到 20 的任意位数,并且应该满足有限标准。

于 2011-10-05T10:23:23.940 回答