Domanda

Devo testare gli URL generali usando qualsiasi protocollo (http, https, shttp, ftp, svn, mysql e cose che non conosco).

Il mio primo passaggio è questo:

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

( PCRE e . NET quindi niente di speciale)

È stato utile?

Soluzione

Secondo RFC2396 :

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

Altri suggerimenti

aggiungendo RegEx come risposta wiki:

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

opzione 2 (Re CMS)

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

Ma questo è lassista per qualsiasi cosa sana di mente così ridotta per renderla più restrittiva e per differenziare altre cose.

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

Sono arrivato a questo da una direzione leggermente diversa. Volevo emulare l'abilità di Gchats per abbinare something.co.uk e collegarlo. Quindi sono andato con una regex che cerca un . senza un periodo successivo o uno spazio su entrambi i lati e quindi afferra tutto intorno ad esso fino a quando non colpisce lo spazio. Corrisponde a un periodo alla fine di un URI, ma lo toglierò più tardi. Quindi questa potrebbe essere un'opzione se preferisci i falsi positivi piuttosto che perdere alcuni potenziali

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']
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top