Eu preciso de um regex para coincidir com URLs gerais
-
08-07-2019 - |
Solução
De acordo com a RFC2396 :
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
Outras dicas
acrescentando que RegEx como uma resposta wiki:
[\w+-]+://([a-zA-Z0-9]+\.)+[[a-zA-Z0-9]+](/[%\w]+)(\?[-A-Z0-9+&@#/%=~_|!:,.;]*)?
opção 2 (Re CMS)
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
Mas isso é para LAX para qualquer coisa sã tão cortado para torná-la mais restritiva e diferenciar off outras coisas.
proto :// name : pass @ server :port /path ? args
^([^:/?#]+)://(([^/?#@:]+(:[^/?#@:]+)?@)?[^/?#@:]+(:[0-9]+)?)(/[^?#]*)(\?([^#]*))?
Eu vim para isso de uma direção ligeiramente diferente. Eu queria emular Gchats capacidade de corresponder something.co.uk
e Linkify-lo. Então eu fui com um regex que procura uma .
sem tanto um período que se segue ou um espaço em ambos os lados e, em seguida, pega tudo em torno dele até que ela atinge espaços em branco. Ele coincide com um período no final de uma URI mas eu estou levando isso mais tarde. Portanto, esta poderia ser uma opção se você preferir falsos positivos sobre faltando alguns potenciais
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']