Regex ISSUE - не может соответствовать URL, который заканчивается ничем - PullRequest
1 голос
/ 27 апреля 2011

Привет, ребята. Я пытаюсь составить регулярное выражение, чтобы оно соответствовало всем URL-адресам:

  1. http://example.com
  2. http://example.com/
  3. http://example.com/index.html
  4. http://example.com/index
  5. http://example.com/index/
  6. http://www.example.com
  7. http://www.example.com/
  8. http://www.example.com/index.html
  9. http://www.example.com/index
  10. http://www.example.com/index/

и для соответствия URL, которые имеют '#' или '? «Только до персонажа, прежде чем эти 2. Сюда http://example.com/index.php?p=Hey -> http://example.com/index.php

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

  • если у меня есть URL-адрес, который не заканчивается ни расширением файла (например: .html, .php), ни папкой (например: /), шаблон будет некорректно соответствовать некоторым URL-адресам (например: http://example.com/about-me) будут исключены.

Любая помощь приветствуется. Спасибо всем.


Это регулярное выражение:

^(?<protocol>http(s?))://(?<domain>[^/\r\n#?]+)(?<path>/[^?#]*(?:html|php|/))?

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Это может делать то, что вы хотите:

^(?<protocol>http(s?))://(?<domain>[^/\s#?]+)(?<path>/[^\s#?]*)?(?<query>.*)?

Запрос будет содержать остаток, который вы можете игнорировать.

1 голос
/ 27 апреля 2011

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

В C # вы можете сделать что-то вроде этого:

string a = "http://example.com/index.php?p=Hey";
string b = a.Remove(a.IndexOfAny(new char[] {'?', '#'}, 0));
...