регулярное выражение для URL, включая строку запроса - PullRequest
6 голосов
/ 26 февраля 2010

Я думал, что это будет простой поиск в Google, но, видимо, нет. Что такое регулярное выражение, которое я могу использовать в C # для анализа URL , включая любую строку запроса из более крупного текста? Я потратил много времени и нашел много примеров тех, которые не включают строку запроса. И я не могу использовать System.URI, потому что это предполагает, что у вас уже есть URL ... Мне нужно найти его в окружающем тексте.

Ответы [ 5 ]

3 голосов
/ 26 февраля 2010

Это должно быть что угодно (добавьте дополнительные протоколы):

@"(https?|ftp|file)\://[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*"

Настоящая трудность - найти конец. Таким образом, этот шаблон основан на поиске недопустимого символа. Это может быть что угодно, кроме букв, цифр, дефиса или точки до конца имени домена, или что-либо, кроме этих плюс косая черта (/), вопросительный знак (?), Амперсанд (&), знак равенства (=), точка с запятой (;), знак плюс (+), восклицательный знак (!), апостроф / одинарная кавычка ('), открывающие / закрывающие скобки, звездочка (*), подчеркивание (_), тильда (~) или знак процента (% ) после доменного имени.

Обратите внимание, что это позволит использовать недопустимые URL-адреса, такие как

http://../

И он будет подбирать вещи после URL, например, в этой строке:

Может быть, вам стоит попробовать http://www.google.com.

Где "http://www.google.com." (с завершающим периодом) будет соответствовать.

Также будет пропущен URL-адрес, который не начинается со спецификации протокола (в частности, протоколы в первом наборе скобок. Например, он пропустит URL-адрес в этой строке:

Возможно, вам стоит попробовать www.google.com.

Очень трудно получить каждый случай без каких-либо более четко определенных границ.

0 голосов
/ 13 августа 2010

Извините, я пока не могу добавлять комментарии, но хотел бы отметить, что ответ P Daddy требует небольшой настройки:

@"(https?|ftp|file)\://[a-zA-Z0-9\.\-]+(/[a-zA-Z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*"
0 голосов
/ 24 июля 2010

Используйте ABNF в конце RFC3986 в качестве отправной точки, чтобы понять это правильно.

Это использует их для проверки URI в Python; не то, что вы ищете, но оно должно дать представление о направлении, в котором вы должны идти: http://gist.github.com/138549

0 голосов
/ 26 февраля 2010

RegexLib имеет много полезных вещей ...

http://regexlib.com/Search.aspx?k=querystring

0 голосов
/ 26 февраля 2010

Проверьте класс строителя QueryString этого парня -

http://weblogs.asp.net/bradvincent/archive/2008/10/27/helper-class-querystring-builder-chainable.aspx

У Microsoft также есть UriBuilder, который может вам помочь -

http://msdn.microsoft.com/en-us/library/system.uribuilder.query.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...