Регулярное выражение для поиска "несуществования" шаблона в конце URL
Я пишу сценарий Rational Functional Testing (RFT) с использованием языка Java, в котором я пытаюсь создать объект в моей карте объектов с помощью регулярного выражения, не соответствующего определенному шаблону.
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), и оно будет использоваться для сопоставления внутри.
Любая помощь, пожалуйста, по этому вопросу?
3 ответа
Используйте это выражение:
^(?:(?!start=\d+).)*$
Преимущество состоит в том, что оно исключает также случаи, когда start=10
появляется в середине URL (т.е. http://AnyHostName/index.jsp?safe=active&q=arab&start=210&ie=UTF-8&oe=UTF-8
).
Тем не менее, это может быть медленным, так как он проверяет негативное прогнозирование для каждого символа.
Почему бы просто не соответствовать
^http://AnyHostName/index.jsp?safe=active&q=arab&ie=UTF-8&oe=UTF-8&start=\d+$
(Вы должны сделать побег в Java.)
и добавьте "!" в вашем заявлении, если ява?
как если бы (!m.match())...
Согласно регулярно-expressions.info взгляд в Java должен быть конечной длины. Так \d+
будет бесконечным.
Я не уверен, но вы можете попробовать
^.*(?<!\start=\d{1,20})$
этот квантификатор {1,20}
будет позволять любое количество цифр от 1 до 20 и должно соответствовать конечным критериям.