Frage

ich für allgemeine URLs testen müssen jedes Protokoll (http, https, SHTTP, ftp, SVN, MySQL und Dinge, die ich weiß, über nicht).

Mein erster Pass ist dies:

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

( PCRE und . NET so nichts zu extravagant)

War es hilfreich?

Lösung

Nach RFC2396 :

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

Andere Tipps

fügen hinzu, dass RegEx als Wiki Antwort:

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

Option 2 (Re CMS)

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

Aber das ist für alles, was gesund so getrimmt lax es restriktiver zu machen und andere Dinge zu unterscheiden, aus.

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

ich dazu kam aus einer etwas anderen Richtung. Ich wollte Gchats Fähigkeit emulieren something.co.uk anzupassen und Linkify es. Also ging ich mit einem regulären Ausdruck, der auf beiden Seiten ohne entweder einen folgenden Zeitraum oder einen Raum für eine . sieht und dann packt alles um ihn herum, bis er Leerzeichen trifft. Sie paßt einen Punkt am Ende eines URI, aber ich nehme später ab. So könnte dies eine Option sein, wenn Sie Fehlalarme über fehlen einige Potenziale bevorzugen

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']
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top