Pergunta
No meu programa C#, escrevi uma função de pesquisa do Google, que funciona buscando a fonte de cada página e obtendo os URLs via Regex.
Meu regex real é:
(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+)
Isso funciona bem no momento, mas eu recebo, por exemplo, URLs como http://www.example.com/forums/arcade.php?efdf=332
Eu só quero chegar neste caso o URL sem o ?efdf=332
no final.
Então, como devo mudar o regex?
Solução
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+
Faz o mesmo que o seu regex (eu removi muito de Cruft desnecessário), mas para de combinar um link antes de um ?
.
Em C#:
Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+")
Dito isto, não tenho certeza se essa é uma maneira tão boa de combinar URLs (que tal https
, ftp
, mailto
etc.?)
Outras dicas
Você pode usar o Uri
Classe para acessar várias partes do URL e remover a sequência de consultas do final ou concatenar as peças desejadas.