2009-02-26 10 views
3

Der aktuelle Ausdruck validiert eine Webadresse (HTTP), wie ändere ich sie, damit eine leere Zeichenfolge auch übereinstimmt?Eine Regex, die eine Webadresse validiert und mit einer leeren Zeichenfolge übereinstimmt?

(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? 
+0

Es kam nicht von der Frage an mich, dass Sie Zeilen in einer Textdatei wurden passend ... Vielleicht haben Sie wahrscheinlich in den HTML-Code einer http-Antwort für Links Parsen wurden und konnte nicht herausfinden den Kontext des Ziels "leere Zeichenfolge", bis ich die von Ihnen ausgewählte Antwort gelesen habe. Denk anders, oder? – Hardryv

+0

für den Fall, dass es für jeden Nutzer hilfreich ist, den ich besucht habe, ist die beste Übereinstimmungszeichenfolge, die ich für in HTML eingebettete URLs entworfen habe, "((http) s?: \/\ /) ([\ W \. \ -_] * (\ /)?) * (# [\ w \. \ -_])? " - Ich habe es gegen mehrere beliebte Websites mit vielen Links getestet und es wird auch das Ende-URL-Seitenklassen-Such-Tag enthalten – Hardryv

Antwort

5

Wenn Sie möchten, um den Ausdruck ändern passen entweder eine völlig leere Zeichenkette oder eine vollständige URL, müssen Sie die Anker Metazeichen verwenden^und $ (die den Anfang und das Ende einer Zeile passen beziehungsweise).

^(|https?:\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)$ 

Wie bereits dirkgently aus, können Sie Ihr Spiel für das Protokoll ein wenig vereinfacht, so dass ich eingeschlossen habe dich auch.

Wenn Sie diesen Ausdruck jedoch in einem Programm oder Skript verwenden, ist es möglicherweise einfacher, die Sprachen zu verwenden, um zu überprüfen, ob die Eingabe leer ist.

// in no particular language... 
if input.length > 0 then 
    if input matches <regex> then 
     input is a URL 
    else 
     input is invalid 
else 
    input is empty 
+0

Akzeptiert als Antwort, weil Sie die einzige Person waren, die das^und $ benötigte, ohne das einfach das? habe irgendein Muster gemacht. Vielen Dank! –

0

Setzen Sie den gesamten Ausdruck in Klammern und als optional („?“ quantifier, keine oder eine Wiederholung) markieren:

((http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)? 
+0

Abgestimmt, weil der vorgeschlagene Ausdruck True für IsMatch ("asd") zurückgibt; –

+0

Ihr Ausdruck hat dies auch nicht berücksichtigt. – Gumbo

0

Expr? wo Expr URL Matcher ist. Genau wie ich für http und https: https?. Die ? ist bekannt als Quantifier - Sie können es nachschlagen. Von Wikipedia:

? Das Fragezeichen zeigt an, dass es null oder eins des vorhergehenden Elements gibt.

+0

Das ist ein großartiger Name DG, unsere Welt ist ein kleinerer Ort ohne DA darin. – Hardryv

Verwandte Themen