Überprüfen Sie für den gültigen link (URL)
War ich zu Lesen, obwohl diese andere Frage die hat einige wirklich gute regex ist für den job, aber soweit ich sehen kann nicht von Ihnen arbeiten mit der BASH-Kommandos BASH-Befehle nicht unterstützen, solch komplexe rexeg.
if echo "http://www.google.com/test/link.php" | grep -q '(https?|ftp|file)://[-A-Z0-9\+&@#/%?=~_|!:,.;]*[-A-Z0-9\+&@#/%=~_|]'; then
echo "Link valid"
else
echo "Link not valid"
fi
Aber das funktioniert nicht, da grep -q funktioniert nicht ...
Bearbeiten, ok ich habe erkannt, dass grep hatte eine "extended-regex" (-E) option, die scheint es zu schaffen. Aber wenn jemand eine bessere/schnellere Weg, ich würde immernoch gerne hier darüber.
Möchten Sie vielleicht zu prüfen, Ihre Beweggründe für diese Frage. Programmierer versuchen zu tun, statische Auswertung von URL/URIs und e-mail-Adressen, die Sie anzeigen können, werden syntaktisch gültig, aber sagt Ihnen nichts über Ihre Zugänglichkeit. Zum Beispiel
Diese Funktion braucht nicht zu wissen, ob die links funktioniert oder nicht, nur, dass es ein link ist.
Was ist eine URL, die nie lokalisiert eine Ressource? Warum einmal die Mühe zu überprüfen?
http://www.example.com/bogus#fragment
immer syntaktisch gültig und wird (vermutlich) immer einen 404 Fehler zurück.Diese Funktion braucht nicht zu wissen, ob die links funktioniert oder nicht, nur, dass es ein link ist.
Was ist eine URL, die nie lokalisiert eine Ressource? Warum einmal die Mühe zu überprüfen?
InformationsquelleAutor Mint | 2010-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende Werke in Bash >= version 3.2 ohne Verwendung
grep
:Ihre regex scheint nicht zu zählen Kleinbuchstaben alphabetische Zeichen
[a-z]
also fügte ich Sie hier.http://печки-лавочки.рф/
ist eine gültige URL. Eine komplette regex finden Sie unter stackoverflow.com/questions/161738schön, funktioniert einwandfrei mit egrep zu (vor allem, dass ich brauchte einige url ' s endet .mp3), Nicolas Raoul, zwei Probleme: 1. Ich war auf der Suche für die bash-Lösung NICHT PHP ! (nicht immer ist das arbeiten mit der bash, und nicht leicht zu konvertieren), die auch international SUX, es in der Regel nur in diesem Land, und wer möchte besucht werden von allen, nicht chrs außerhalb der standard-ascii - (ich Lebe in einem solchen Land und versuchen zu vermeiden, dass alle Kosten) ... ich bin nicht einmal reden über die Sie nicht eine Antwort haben, gekennzeichnet als eine Lösung ...
Das war hilfreich. Aber ich denke, Sie wollen zu verankern, die regex zu vermeiden, um eine Zeichenfolge wie
'garbage http://google.com'
übergeben wird, als gültig. Ich habe gerade ein ^ und $ den Anfang und das Ende des regex-jeweils etwa so:regex='^(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]$'
InformationsquelleAutor Dennis Williamson
Wahrscheinlich, weil der reguläre Ausdruck geschrieben wird, in PCRE-syntax. Sehen Sie, wenn Sie (oder installieren) das Programm
pcregrep
auf Ihrem system - es hat die gleiche syntax wiegrep
aber akzeptiert Perl-kompatibel regexes - und Sie sollten in der Lage sein, die Arbeit.Andere Möglichkeit ist, zu versuchen, die
-P
optiongrep
, aber die man-page sagt, dass die "hochgradig experimentell", so dass es möglicherweise oder möglicherweise nicht wirklich funktioniert.Ich werde sagen, dass Sie sollten sorgfältig darüber nachdenken, ob es wirklich angemessen sein, die Verwendung dieser oder einer regex zum überprüfen einer URL. Wenn Sie möchten, um eine korrekte Validierung, würden Sie wahrscheinlich besser dran, suchen oder schreiben ein kleines script in Perl, die Verwendung der URL-überprüfung der Einrichtungen der Sprache.
BEARBEITEN: In der Antwort auf deinen edit in der Frage, habe ich nicht bemerkt, dass regex gilt auch in der "extended" - syntax. Ich glaube nicht, dass Sie sich besser/schneller.
InformationsquelleAutor David Z