Регулярное выражение для поиска отсутствия шаблона в конце 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) и будет использоваться для внутреннего сопоставления.

Любая помощь, пожалуйста, по этому вопросу?


person yazankhs    schedule 05.10.2011    source источник
comment
\d должно работать, но \s определенно неверно — опустите обратную косую черту перед s.   -  person tripleee    schedule 05.10.2011
comment
Извиняюсь перед всеми, кого я запутал с тегом Java, я соответствующим образом изменил вопрос. Я пробовал большинство решений, опубликованных здесь, и решение, предоставленное @Joaquim-Rendeiro, решило мою проблему.   -  person yazankhs    schedule 05.10.2011


Ответы (3)


Используйте это выражение:

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

Его преимущество заключается в том, что он также исключает случаи, когда start=10 появляется в середине URL-адреса (например, http://AnyHostName/index.jsp?safe=active&q=arab&start=210&ie=UTF-8&oe=UTF-8).

Однако это может быть медленным, поскольку для каждого символа проверяется отрицательный прогноз.

person Joaquim Rendeiro    schedule 05.10.2011
comment
Вы можете сделать отрицательный просмотр вперед привязанным к & или $; это может помочь немного ускорить его. А если у вас нет якоря, замыкающий плюс лишний. ^(?:/(?!start=\d+(&|$)).)*$ - person tripleee; 05.10.2011
comment
Но в том то и дело, что в данном случае это не работает. Попробуйте здесь is.gd/XZuvRb - person Joaquim Rendeiro; 05.10.2011

почему бы просто не соответствовать

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

(вы должны сделать побег в java.)

и добавьте "!" в вашем выражении java if?

например, если (!m.match())...

person Kent    schedule 05.10.2011
comment
Как я уже упоминал в комментарии выше, инструмент запрещает использование кода Java, хотя он основан на Java. - person yazankhs; 05.10.2011

В соответствии с regular-expressions.info внешний вид в java должен иметь конечную длину. Таким образом, \d+ будет бесконечным.

Я не уверен, но вы можете попробовать

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

этот квантификатор {1,20} допускает любое количество цифр от 1 до 20 и должен удовлетворять конечным критериям.

person stema    schedule 05.10.2011