我正在尝试从href中的url参数获取一个ID,如下所示:
<a href="http://www.mysite.com/myitem.php?id=71312">MyItemName</a>
我只想要71312,而且我想尝试使用正则表达式(但如果你有更好的approch,我会很乐意尝试):
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
答案 0 :(得分:1)
要显示正则表达式出错的地方:
.
和?
是正则表达式中的特殊字符。 .
表示“任何字符”,?
表示“前一个表达式的零或一个出现”。因此你的正则表达式无法匹配。此外,您需要在C#中使用逐字字符串(除非您想要转义每个反斜杠):
@"<a href=\"http://www\.mysite\.com/myitem\.php\?id=(\d+)\">" + myItemName + "</a>";
可能会奏效。
尽管如此,除非您正在检查的所有链接都遵循这种格式,否则您可能会遇到问题。通过正则表达式解析HTML会让你感受到Cthulhu的愤怒。这就是在这里运行的噱头。
答案 1 :(得分:0)
使用:
Uri u = new Uri("http://www.mysite.com/myitem.php?id=12313");
string s = u.Query;
HttpUtility.ParseQueryString(s).Get("id");
在变量id
中,您有数字。找出函数的其余部分:)