Регулярное выражение для URL-адресов сайтов

У меня есть два URL-адреса с шаблонами:

1. http://localhost:9001/f/

2. http://localhost:9001/flight/

У меня есть фильтр сайтов, который перенаправляет на соответствующие сайты, если регулярное выражение совпадает. Я пробовал следующие шаблоны регулярных выражений для двух URL-адресов, указанных выше:

http?: // localhost [^ /] / f [^ flight] /. *

http?: // localhost [^ /] / flight /. *

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

Я пробовал http?: // localhost [^ /] / [f] /. * Также для 1-го URL. Я не могу получить то, что мне не хватает. Я чувствую, что это регулярное выражение не должно принимать ничего, кроме «f», но также разрешает «полет».

Пожалуйста, помогите мне, указав на ошибку, которую я сделал.


person phani sekhar    schedule 13.05.2015    source источник
comment
Что именно ты пытаешься сделать? Куда должен быть направлен каждый URL-адрес? Что произойдет, если вы попробуете http?: // localhost [^ /] /f/.* VS http?: // localhost [^ /] /flight/.*?   -  person shapiro yaacov    schedule 13.05.2015
comment
каждый URL-адрес будет перенаправлен на разные сайты. Мои адреса: 1. [ссылка] localhost: 9001 / f / 2. [ссылка] localhost: 9001 / flight /. У меня есть фильтр сайта, который сравнивает с шаблонами регулярных выражений и перенаправляет на соответствующие сайты   -  person phani sekhar    schedule 13.05.2015


Ответы (4)


Будьте проще:

.*/f(/[^/]*)?$

vs

.*/flight(/[^/]*)?$

Добавление ? перед $ делает завершающую косую черту с необязательным термином пути необязательным.

person Bohemian♦    schedule 13.05.2015
comment
первое регулярное выражение не работает для следующего URL-адреса localhost: 9001 / f. Пользователь может ввести URL-адрес с косой чертой, которую я пробовал, или без нее. * / [f] $ не работает, я сделал что-то не так - person phani sekhar; 18.08.2015
comment
Это будет работать только для '/ f' или '/ f /'. '/ f' - это контекстный путь URL-адреса, поэтому после него может быть что угодно, например localhost: 9001 / f / myPage или localhost: 9001 / f / yourPage /. Я пробовал '/f/?$.*', но все еще не работает. Если я использую '/f/?$*.*', он также принимает второй URL-адрес - person phani sekhar; 19.08.2015
comment
@phani Я снова отредактировал. В будущем это поможет предоставить различные совпадающие и несоответствующие примеры. - person Bohemian♦; 19.08.2015

Первый будет пойман следующим регулярным выражением;

/^http:[\/]{2}localhost:9001\/f[^light]$/

Другой будет запрещен и может быть найден с помощью следующего регулярного выражения

/^http:[\/]{2}localhost:9001\/flight\/$/

person Martijn Kerckhaert    schedule 13.05.2015

У вашего регулярного выражения есть несколько проблем: 1) p? означает необязательный p (htt:// будет соответствовать), 2) [^/] будет соответствовать только : в ваших URL-адресах, поскольку он будет захватывать только 1 символ (и у вас есть номер порта) , 3) [^light] - это класс символов с отрицанием, который означает любой символ, отличный от l, i, g, h или t.

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

http://localhost[^/]*/f/.*

И этот для второго

http://localhost[^/]*/flight/.*

Также имейте в виду, что в зависимости от того, где вы используете регулярные выражения, ваш фактический ввод может включать или не включать протокол.

person Wiktor Stribiżew    schedule 13.05.2015

Это должно сработать для вас:

http[s]{0,1}:\/\/localhost:[0-9]{4}\/f\/
http[s]{0,1}:\/\/localhost:[0-9]{4}\/flight\/

Вы можете увидеть, как он работает здесь

person Matthew North    schedule 13.05.2015