Domanda
Nel mio programma C # Ho scritto una funzione di ricerca di Google, che funziona dal recupero la fonte da ogni pagina e ottenere gli URL tramite espressioni regolari.
Il mio attuale Regex è:
(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+)
Questo funziona bene in questo momento, ma ottengo ad esempio gli URL come http://www.example.com/forums/arcade.php?efdf=332
Voglio solo per ottenere in questo caso l'URL senza il ?efdf=332
alla fine.
Quindi, come devo cambiare la regex?
Soluzione
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+
fa la stessa come la vostra regex (ho rimosso un sacco di cruft inutile) ma si ferma corrispondenza un link prima di un ?
.
In C #:
Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+")
Detto questo, io non sono sicuro che questo è un buon modo tale di URL corrispondenti (per quanto riguarda https
, ftp
, mailto
ecc.?)
Altri suggerimenti
È possibile utilizzare la classe Uri
per accedere a varie parti dell'URL e rimuovere la stringa di query dalla fine, o concatenare le parti che si desidera.