Frage
In meinem C # Programm schrieb ich eine Google-Suche-Funktion, die durch Abrufen der Quelle von jeder Seite funktioniert und bekommen die URLs über regex.
Meine eigentliche Regex ist:
(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+)
Das funktioniert gut im Moment, aber ich habe zum Beispiel URLs wie http://www.example.com/forums/arcade.php?efdf=332
Ich will nur ohne die ?efdf=332
in diesem Fall die URL erhalten am Ende.
Wie soll ich die Regex ändern?
Lösung
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+
macht das gleiche wie Ihre regex (ich eine Menge unnötiger cruft entfernt haben), sondern hält einen Link vor einem ?
entsprechen.
In C #:
Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+")
Das heißt, ich bin nicht sicher, das ist so eine gute Möglichkeit der passenden URLs (was https
, ftp
, mailto
etc.?)
Andere Tipps
Sie können über den Uri
Klasse den Zugriff auf verschiedene Teile die URL und entweder den Abfrage-String aus dem Ende entfernen, oder die Teile verketten Sie wollen.