Мне нужен регекс, чтобы соответствовать общим URL - PullRequest
0 голосов
/ 21 ноября 2008

Мне нужно проверить общие URL-адреса, используя любой протокол (http, https, shttp, ftp, svn, mysql и другие, о которых я не знаю).

Мой первый проход такой:

\w+://(\w+\.)+[\w+](/[\w]+)(\?[-A-Z0-9+&@#/%=~_|!:,.;]*)?

( PCRE и .NET , поэтому ничего особенного)

Ответы [ 3 ]

3 голосов
/ 21 ноября 2008

Согласно RFC2396 :

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
1 голос
/ 21 ноября 2008

добавив, что RegEx в качестве ответа вики:

[\w+-]+://([a-zA-Z0-9]+\.)+[[a-zA-Z0-9]+](/[%\w]+)(\?[-A-Z0-9+&@#/%=~_|!:,.;]*)?

вариант 2 (Re CMS)

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

Но это не относится ко всему разумному, настолько урезанному, чтобы сделать его более ограничительным и дифференцировать другие вещи.

proto      ://  name      : pass      @  server    :port      /path     ? args
^([^:/?#]+)://(([^/?#@:]+(:[^/?#@:]+)?@)?[^/?#@:]+(:[0-9]+)?)(/[^?#]*)(\?([^#]*))?
0 голосов
/ 29 марта 2013

Я пришел к этому с немного другой стороны. Я хотел подражать способности gchats соответствовать something.co.uk и связать ее. Поэтому я выбрал регулярное выражение, которое ищет . без следующего периода или пробела с обеих сторон, а затем захватывает все вокруг, пока не достигнет пробела. Это соответствует периоду в конце URI, но я снимаю это позже. Так что это может быть вариант, если вы предпочитаете ложные срабатывания, а не некоторые потенциалы

url_re = re.compile(r"""
           [^\s]             # not whitespace
           [a-zA-Z0-9:/\-]+  # the protocol and domain name
           \.(?!\.)          # A literal '.' not followed by another
           [\w\-\./\?=&%~#]+ # country and path components
           [^\s]             # not whitespace""", re.VERBOSE) 

url_re.findall('http://thereisnothing.com/a/path adn some text www.google.com/?=query#%20 https://somewhere.com other-countries.co.nz. ellipsis... is also a great place to buy. But try text-hello.com ftp://something.com')

['http://thereisnothing.com/a/path',
 'www.google.com/?=query#%20',
 'https://somewhere.com',
 'other-countries.co.nz.',
 'text-hello.com',
 'ftp://something.com']
...