Я довольно новичок в регулярных выражениях, но я уверен, что регулярное выражение даст мне нечто гораздо более элегантное, чем все, что я мог бы сделать с помощью строковых методов.
У меня есть гиперссылка в виде:
<a href="http://server.com/default.aspx?abc=123">hello</a>
Я хочу вытянуть только часть строки запроса. Кроме того, что является хорошим справочником для регулярных выражений .net (овечная улыбка)? Я нахожу MSDN ссылку очень трудной для подражания.
следующий код извлечет строку запроса
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
Вместо регулярного выражения, не могли бы вы просто использовать класс Uri, в частности свойство Uri.Query?
Uri
Uri.Query
Пример:
Uri uri = new Uri("http://server.com/default.aspx?abc=123"); Console.WriteLine(uri.Query);
Печать:
?abc=123
/<a\s+href="[^?]+\?(.*)">/
или даже это должно работать:
/\?(.+)"/
Редактировать: следите за жадностью. Для лени (если есть другие атрибуты), используйте это.
/\?(.+?)"/
Спасибо @ Guffa
Для разработки регулярных выражений я рекомендую Expresso . Что касается самого регулярного выражения, поиск? и совпадать до следующего ".
Это регулярное выражение должно работать
(?<=href="[^"]+\?)[^"]+
Вот с тестовыми примерами в Regex Hero . (Вы также можете использовать этот инструмент для генерации кода .NET для вас.)
И что касается справки, я работаю над чистой и краткой .NET regex reference . Это не совсем сделано, но это довольно близко. Вы также можете щелкнуть регулярное выражение, чтобы увидеть пример слайда с аккуратной анимацией jQuery, но я отвлекся.
А еще есть более подробный справочный сайт по адресу http://www.regular -expressions.info / с краткими ссылками и повествовательным стилем, объясняющим все.
Возможно, что-то простое?
/\?([^\"]+)\"/
Это будет соответствовать abc=123.
abc=123