Получить номер параметра URL-адреса href со страницы загруженного html? - PullRequest
0 голосов
/ 13 ноября 2010

Я пытаюсь получить идентификатор из параметра url внутри href, который выглядит следующим образом:

<a href="http://www.mysite.com/myitem.php?id=71312">MyItemName</a>

Я хочу только 71312 и сейчас я пытаюсь сделать это с помощью регулярных выражений (ноесли у вас есть лучший подход, я был бы рад попробовать):

        string html,itemID;
        using (var client = new WebClient())
        {
            html = client.DownloadString("http://www.mysite.com/search.php?search_text=" + myItemName);
        }

        string pattern = "<a href=\"http://www.mysite.com/myitem.php?id=(\d+)\">" + myItemName + "</a>";
        Match m = Regex.Match(html, pattern, RegexOptions.IgnoreCase);
        if (m.Success)
        {
            itemID = m.Groups[1].Value;
            MessageBox.Show(itemID);
        }

Пример HTML:

more html body
<h1>Items - List</h1>
<p><a href="http://www.mysite.com/myitem.php?id=12313">MyItemNameTest</a>, <a href="http://www.mysite.com/myitem.php?id=83">MyItemNameTestB</a>, <a href="http://www.mysite.com/myitem.php?id=213784">MYItemNameOther</a></p>

</div>
more html body

Ответы [ 2 ]

1 голос
/ 13 ноября 2010

Чтобы показать, где ваше регулярное выражение пошло не так:

. и ? - это специальные символы в регулярных выражениях. . означает «любой символ», а ? означает «ноль или один случай предыдущего выражения». Поэтому ваше регулярное выражение не соответствует. Кроме того, вам нужно использовать дословные строки в C # (если вы не хотите экранировать каждый обратный слеш):

@"<a href=\"http://www\.mysite\.com/myitem\.php\?id=(\d+)\">" + myItemName + "</a>";

вероятно будет работать.

Тем не менее, если все ссылки, которые вы просматриваете, не соответствуют именно этому формату, у вас могут возникнуть проблемы. Здесь, на SO, довольно круто, что анализ HTML с помощью регулярных выражений принесет вам гнев Ктулху.

0 голосов
/ 13 ноября 2010

Использование:

Uri u = new Uri("http://www.mysite.com/myitem.php?id=12313");
string s = u.Query;
HttpUtility.ParseQueryString(s).Get("id");

В переменной id у вас есть номер. Разберись с остальной функцией:)

...