Question
Dans mon programme C # J'ai écrit une fonction de recherche Google, qui fonctionne en allant chercher la source de chaque page et obtenir les URL via regex.
Mon réelle expression rationnelle est:
(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+)
Cela fonctionne bien pour le moment, mais je reçois par exemple les URL comme http://www.example.com/forums/arcade.php?efdf=332
Je veux juste obtenir dans ce cas, l'URL sans ?efdf=332
à la fin.
Alors, comment dois-je changer le regex?
La solution
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+
fait la même chose que votre regex (je l'ai enlevé beaucoup de cochonneries inutiles), mais arrête un lien correspondant à une avant ?
.
En C #:
Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+")
Cela dit, je ne suis pas sûr que ce soit une bonne façon d'URL correspondant (quid https
, ftp
, mailto
etc.?)
Autres conseils
Vous pouvez utiliser la classe Uri
pour accéder aux différentes parties de l'URL et supprimez la chaîne de requête à partir de la fin ou concaténer les pièces que vous voulez.