Регулярное выражение, чтобы соответствовать относительный путь URL - PullRequest
0 голосов
/ 27 августа 2018

Как написать регулярное выражение, которому соответствуют все три ситуации ниже? Путь, файл и строка запроса должны быть точными. Доменная часть может быть любым из следующих вариантов (доменное имя / IP-адрес)

http://www.example.com/path1/path2/foobar.aspx?id=123&key=456
https://www.example.com/path1/path2/foobar.aspx?id=123&key=456
64.123.456.789/path1/path2/foobar.aspx?id=123&key=456

По сути, необходимо сопоставить только / path1 / path2 / foobar.aspx? Id = 123 & key = 456 . Часть перед ним может быть любым из вариантов, ведущих пользователя на сайт.

1 Ответ

0 голосов
/ 28 августа 2018

Код

\.[^/]+(.*)

Попробуйте онлайн!

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


Объяснение

\.                  Gets the first dot of the address
       [^/]+        Matches all characters that aren't forward slashes
            (.*)    Captures the rest of the address

Дополнительные пояснения

Причина, по которой я не могу сопоставить (а не перехватить ) адрес, заключается в том, что у меня нет выражений, которые бы точно представляли начало относительного пути (без совпадения с другими символами).

Это потому, что некоторые адреса имеют протокольную часть (например, http://), а другие - нет. Две дополнительные косые черты означают, что RegEx станет намного длиннее, чтобы убедиться, что мы попали в правильную косую черту.

Я использовал первую точку, поскольку все адреса (насколько я знаю) имеют точку в домене (www.something.com или 64.123.456.789). Поскольку домен всегда находится непосредственно перед относительным путем, мы можем просто перейти к следующему прямому слешу и всегда прийти к относительному пути.

Затем мы просто фиксируем оставшуюся часть адреса (включая первую косую черту), которую потом легко получить.

...