2010-11-21 16 views
0

In meinem C# -Programm habe ich eine Google-Suchfunktion geschrieben, bei der die Quelle von jeder Seite abgerufen und die URLs über Regex abgerufen werden.Regex für URL C#

Meine eigentliche Regex ist:

(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+) 

Dies ist im Moment gut funktioniert, aber ich beispielsweise URLs wie http://www.example.com/forums/arcade.php?efdf=332

Ich mag einfach die URL in diesem Fall erhalten, ohne die ?efdf=332 bei der Ende.

Also, wie sollte ich die Regex ändern?

+0

Hallo Omegavirus, willkommen zu Stack Overflow. Ich habe bemerkt, dass Sie sich viel Mühe gegeben haben, um Ihre Regex korrekt zu formatieren, aber Sie hätten es viel einfacher haben können. Fügen Sie einfach den Originalregex ein, markieren Sie ihn und drücken Sie Strg-K. Dies formatiert den Text als wörtlichen Text (wie HTML 'pre' Tag). Viel weniger Fehlerpotenzial. –

+0

oh ich wusste das nicht, danke;) und die Regex ist von meinem C# -Programm so sind maskiert. vergaß das zu sagen. – Omegavirus

+2

Verwenden Sie in C# Verbatim-Zeichenfolgen ('@" foo "') mit Regexes. Dann müssen Sie Ihren Backlashes nicht entkommen. Du wirst sonst verrückt werden. Regexes sind hart genug, um schon zu lesen ... –

Antwort

1
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, URLs passender (? Was ist https, ftp, mailto etc.)

+0

vielen Dank;) https etc ist kein Problem, weil ich sie nicht brauchen .. http ist alles :) gerade getestet Ihre Regex und es funktioniert fast. aber jetzt bekomme ich URLs wie http://www.blabla.com/forums/&blabla wie man diese auch heraus filtert? – Omegavirus

+0

Sie wollen also nur Domain + Pfad ohne Parameter? –

+0

das ist genau das, was ich will;) – Omegavirus

0

können Sie verwenden die Klasse Uri, um auf verschiedene Teile der URL zuzugreifen und entweder die Abfragezeichenfolge am Ende zu entfernen oder die gewünschten Teile zu verketten.