Question

J'ai besoin de tester les URL générales en utilisant n'importe quel protocole (http, https, shttp, ftp, svn, mysql et des choses que je ne connais pas).

Mon premier passage est le suivant:

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

( PCRE et . NET , il n’ya rien d’extraordinaire)

Était-ce utile?

La solution

Selon la RFC2396 :

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

Autres conseils

ajoutant ce RegEx comme réponse wiki:

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

option 2 (Re CMS)

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

Mais c’est trop laxiste pour des choses saines et équilibrées afin de les rendre plus restrictives et de les différencier.

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

Je suis venu à cela d'une direction légèrement différente. Je voulais émuler la capacité de gchats de faire correspondre quelque chose.co.uk et de le lier. Alors je suis allé avec une regex qui cherche un . sans période suivante ni espace de chaque côté, puis saisit tout ce qui est autour jusqu'à ce que tout soit vide. Cela correspond à un point à la fin d'un URI, mais je l'enlève plus tard. Donc, cela pourrait être une option si vous préférez les faux positifs plutôt que de manquer des potentiels

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']
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top