Регулярное выражение для поиска строки запроса гиперссылки - PullRequest
0 голосов
/ 22 сентября 2009

Я довольно новичок в регулярных выражениях, но я уверен, что регулярное выражение даст мне нечто гораздо более элегантное, чем все, что я мог бы сделать с помощью строковых методов.

У меня есть гиперссылка в виде:

<a href="http://server.com/default.aspx?abc=123">hello</a>

Я хочу вытянуть только часть строки запроса. Кроме того, что является хорошим справочником для регулярных выражений .net (овечная улыбка)? Я нахожу MSDN ссылку очень трудной для подражания.

Ответы [ 6 ]

2 голосов
/ 22 сентября 2009

следующий код извлечет строку запроса

string html = "<a href=\"http://server.com/default.aspx?abc=123\">hello</a>";
Match m = Regex.Match(html, "<a[^>]+href=\".*?\\?(.*?)\">");
string querystring = m.Groups[1].ToString();

регулярное выражение объяснил:

take only strings starting with <a href="
between the a and href there can be other attributes, spaces, it ignores them
make a group of the the url, from the first question mark to the ending quotes - this is your query string
1 голос
/ 25 сентября 2009

Вместо регулярного выражения, не могли бы вы просто использовать класс Uri, в частности свойство Uri.Query?

Пример:

Uri uri = new Uri("http://server.com/default.aspx?abc=123");
Console.WriteLine(uri.Query);

Печать:

?abc=123

1 голос
/ 22 сентября 2009
 /<a\s+href="[^?]+\?(.*)">/

или даже это должно работать:

/\?(.+)"/

Редактировать: следите за жадностью. Для лени (если есть другие атрибуты), используйте это.

/\?(.+?)"/

Спасибо @ Guffa

1 голос
/ 22 сентября 2009

Для разработки регулярных выражений я рекомендую Expresso . Что касается самого регулярного выражения, поиск? и совпадать до следующего ".

0 голосов
/ 25 сентября 2009

Это регулярное выражение должно работать

(?<=href="[^"]+\?)[^"]+

Вот с тестовыми примерами в Regex Hero . (Вы также можете использовать этот инструмент для генерации кода .NET для вас.)

И что касается справки, я работаю над чистой и краткой .NET regex reference . Это не совсем сделано, но это довольно близко. Вы также можете щелкнуть регулярное выражение, чтобы увидеть пример слайда с аккуратной анимацией jQuery, но я отвлекся.

А еще есть более подробный справочный сайт по адресу http://www.regular -expressions.info / с краткими ссылками и повествовательным стилем, объясняющим все.

0 голосов
/ 22 сентября 2009

Возможно, что-то простое?

/\?([^\"]+)\"/

Это будет соответствовать abc=123.

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