Perl регулярное выражение - PullRequest
0 голосов
/ 03 марта 2011

У меня есть несколько URL в этом формате.Некоторые URL содержат &abc=4, а некоторые нет.

xxxxxxxxxxxxxxxxxxxxxxxxxxx&abc=4
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&abc=4
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

здесь xxxxxxxxxxxxxxxxxxxxx - это строка

Я хочу сопоставить URL-адреса, которые имеют только xxxxxxxxxxxxxxxxx, а не &abc=4 (имеется в виду Iхочу получить URL-адреса такого типа, только xxxxxxxxxxxxxx, xxxxxxxxxxxxxx, xxx)

Я знаю, как написать регулярное выражение, соответствующее всему URL.Например: /x.*abc=4/

Но как мне написать регулярное выражение, которое соответствует только xxxxxxxxxx и , а не &abc=4?

Ответы [ 3 ]

1 голос
/ 03 марта 2011

Я бы использовал отрицательное прогнозное утверждение (смотрите вперед, что не разрешено следовать моему шаблону)

^(?!.*&abc=4$).*$

Этот шаблон будет соответствовать любой строке, которая не заканчивается на &abc=4

Вы можете проверить это онлайн здесь: http://www.rubular.com/

0 голосов
/ 03 марта 2011

Предполагая, что ваши URL-адреса находятся в каждой строке, вы можете использовать:

([^&]+?)

Это будет в основном соответствовать любому первому экземпляру &.

Как сказал @Benoit, выможно сделать это, используя выражение нулевой ширины, чтобы отменить захват строки запроса, но вы бы хотели получить положительный прогноз, а не отрицательный взгляд, пример синтаксиса ниже:

(?=(&[^=]+?\d+)+)

Как вы можете видеть, хотя, это усложнит выражение прикосновения.

Надеюсь, это поможет.

0 голосов
/ 03 марта 2011

Использовать отрицательный взгляд за утверждением . Форма:

(?<![&?]abc=4)

(это также исключает ?abc=4).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...