Expresiones regulares para la URL C #
-
26-09-2019 - |
Pregunta
En mi programa en C # Me escribió una función de búsqueda de Google, que funciona por ir a buscar la fuente de cada página y conseguir las direcciones URL a través de expresiones regulares.
Mi real expresión regular es:
(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+)
Esto funciona bien en este momento, pero me da, por ejemplo, las direcciones URL como http://www.example.com/forums/arcade.php?efdf=332
Sólo quiero estar en este caso la URL sin el ?efdf=332
al final.
Entonces, ¿cómo debería cambiar la expresión regular?
Solución
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+
hace lo mismo que su expresión regular (He quitado una gran cantidad de costra innecesario), pero se detiene a juego un enlace antes de una ?
.
En C #:
Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+")
Dicho esto, no estoy seguro de que esto es una buena manera de URLs que coinciden (¿qué pasa con https
, ftp
, mailto
etc.?)
Otros consejos
Se puede utilizar la clase Uri
para acceder a diversas partes de la dirección URL y, o bien eliminar la cadena de consulta desde el final, o concatenar las partes que desea.