Мне нужен регекс, чтобы соответствовать общим URL

StackOverflow https://stackoverflow.com/questions/307141

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

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

( PCRE и . NET , так что ничего особенного)

Это было полезно?

Решение

Согласно RFC2396 :

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

Другие советы

добавление этого 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]+)?)(/[^?#]*)(\?([^#]*))?

Я пришел к этому с немного другой стороны. Я хотел эмулировать способность 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']
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top