Pregunta

Necesito probar las URL generales usando cualquier protocolo (http, https, shttp, ftp, svn, mysql y cosas que no conozco).

Mi primer paso es este:

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

( PCRE y . NET , así que nada que desear)

¿Fue útil?

Solución

Según RFC2396 :

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

Otros consejos

agregando que RegEx como una respuesta wiki:

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

opción 2 (Re CMS)

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

Pero eso es relajado para cualquier cosa sensata tan recortada para hacerlo más restrictivo y diferenciar otras cosas.

proto      ://  name      : pass      @  server    :port      /path     ? args
^([^:/?#]+)://(([^/?#@:]+(:[^/?#@:]+)?@)?[^/?#@:]+(:[0-9]+)?)(/[^?#]*)(\?([^#]*))?

Llegué a esto desde una dirección ligeramente diferente. Quería emular la capacidad de gchats para hacer coincidir something.co.uk y vincularlo. Así que elegí una expresión regular que busca un . sin un período siguiente o un espacio a cada lado y luego agarro todo a su alrededor hasta que llega al espacio en blanco. Coincide con un punto al final de un URI, pero me lo quitaré más tarde. Entonces, esta podría ser una opción si prefiere falsos positivos en lugar de perder algunos potenciales

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top