Pergunta

Eu preciso de teste para URLs gerais usando qualquer protocolo (http, https, SHTTP, ftp, svn, mysql e coisas que eu não sei sobre).

A minha primeira passagem é esta:

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

( PCRE e . NET por isso nada a fantasia)

Foi útil?

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']
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top