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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top