Perl regex-Ersetzung für eine URL
Ich bin versucht, einen komplexen regulären Ausdruck für URLs im Fließtext. Das Ziel ist, trennen Sie die URLs in den text.
Ich würde gerne etwas tun, wie die unten
perl -pe 's/regex/left $1 right/g;' inputfile
welche ersetzt alle vorkommen des regex mit dem übereinstimmenden Wert, umgeben von den Worten left
und right
Dies ist nur ein Vereinfachtes Beispiel um den Punkt zu illustrieren - das Reale Szenario hat jede Menge -e
Ausdrücken und ich freue mich auf weitere hinzufügen, die für diesen speziellen passenden Zweck.
Regex ist whever entspricht einer URL. Ich begreife das passende URLs ist sehr schwierig und wahrscheinlich unmöglich zu ermitteln, alle Möglichkeiten, aber eine vernünftige Annäherung wäre in Ordnung. Ich fand eine solche Annäherung an http://daringfireball.net/2010/07/improved_regex_for_matching_urls.
Doch ich kann nicht, dass regex zu arbeiten, in ein perl-Konstrukt, wie oben beschrieben. Ich habe versucht, mit verschiedenen Trennzeichen als /
zum Beispiel ~
aber ohne Erfolg.
- möglich, Duplikat der Was ist die beste regular expression um zu überprüfen, ob ein string eine gültige URL?
- Es gibt viele ähnliche Fragen, aber ich glaube nicht, es war Sie zu duplizieren, denn ich wurde gefragt, wie die Verwendung einer spezifischen komplexen regex (das sagt der Autor arbeitet in Perl) in einer bestimmten Weise auf ein Perl-Befehl-Linie (nämlich als
-e
Ausdruck). Ich habe die beste Antwort, die ich mit oben kommen kann, aber würde niemanden interessieren, demonstriert die Verwendung von Schwergewichts-regex alsperl -pe
Ausdruck.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anhang B RFC 2396 gibt ein regex zum Parsen von URIs.
Die regex direkt verwendbar ist, in Perl, wie in
Gier in regex Quantoren wird wahrscheinlich machen Sie dieses Muster schwierig zu verwenden mit
s///
weil es verbraucht so viel text wie möglich, wahrscheinlich überrollen unmarkierten URI Grenzen.Mehr direkt anwendbar ist die URI::Find - Modul, welches es auf CPAN. Umschreibt LINKS und RECHTS ist so einfach wie
Ausgabe:
ftp://username@hostname/
oderftp://username:password@hostname/
Fand ich eine Antwort auf diese Frage durch eine andere Frage Mit regex zu extrahieren, URLs in reinen text mit Perl. Die URL ist viel einfacher als die, die ich versuchte vor, aber scheint zu funktionieren in den einfachen Fällen, die ich getestet habe.
Regex für entsprechende URL kann leicht unüberschaubar geworden:
Geben Sie Regexp::Common:
So, zur Lösung Ihres konkreten Fall: