Вопрос
В моей программе C # я написал функцию поиска Google, которая работает, выявляя источник с каждой страницы и получать URL через Regex.
Мое настоящее регулярное выражение:
(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+)
Это работает хорошо в данный момент, но я получаю, например, URL, как http://www.example.com/forums/arcade.php?efdf=332
Я просто хочу получить в этом случае URL без ?efdf=332
в конце.
Так как я должен изменить Regex?
Решение
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+
делает то же самое, что ваше регулярное выражение (я удалил много ненужных Cruft), но останавливается сопоставление ссылки до ?
.
В C #:
Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+")
Тем не менее, я не уверен, что это такой хороший способ сопоставления URL (как насчет https
, ftp
, mailto
так далее.?)
Другие советы
Вы можете использовать Uri
Класс для доступа к различным частям URL-адреса и либо удалите строку запроса с конца, либо объединяйте нужные запчасти.