Мне нужен регекс, чтобы соответствовать общим URL
-
08-07-2019 - |
Решение
Согласно 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']
Не связан с StackOverflow