我想得到桌子" Partite"在本网站上:
http://it.soccerway.com/national/italy/serie-a/20142015/regular-season/r27139/
所以我创建了这段代码:
Dim HTML As String = New WebClient().DownloadString(URLs(MetroComboBox2.SelectedIndex))
Dim URL_Params As String = "&callback_params=" & Regex.Match(HTML, "'block_competition_matches_summary', ({[\w\s"",:]+})").Groups(1).ToString
Dim Base_URL As String = "http://it.soccerway.com/a/block_competition_matches_summary?block_id=page_competition_1_block_competition_matches_summary_6"
Dim Giornata_URL As String = Base_URL & URL_Params & "&action=changeView¶ms={""view""%3A1}"
使用Html变量我得到之前发布的链接,在 URL_Params 我试图匹配div类" block_competition_matches_summary &# 34;。
但显然正规则不会抓住这个元素。
所以我在 Giornata_Url 中汇总所有变量。我错了什么?
答案 0 :(得分:1)
我想您正在尝试匹配网页的这一部分?
'block_competition_matches_summary', {"page":0,"bookmaker_urls":{"13":[{"link":"http:\/\/www.bet365.com\/home\/?affiliate=365_308136","name":"Bet 365"}]},"block_service_id":"competition_summary_block_competitionmatchessummary","round_id":27139,"outgroup":false,"view":2}
这个正则表达式永远不会匹配:
'block_competition_matches_summary', ({[\w\s",:]+})
数据结构包含嵌套大括号;字符类[\w\s",:]
未满足的要求。
使用正则表达式匹配嵌套大括号并不容易。哪个关闭括号应该关闭比赛?
一个简单的替代方法是将匹配的结尾锚定到该行的末尾。这个正则表达式可以正常工作:
'block_competition_matches_summary', (\{.*?\})\);\n
说明:
(
- 捕获子模式的开始\{
- 请远离括号,因为它们在正则表达式语法中具有特殊含义.*?
- 任意数量的字符,非贪婪(这在此必不可少)\}
- 再次,逃避大括号)
- 捕获子模式的结束\)
- 文字字符:右括号;
- 字面字符:分号\n
- linebreak 我建议您将其与RegexOptions.Singleline
结合使用,以防万一您要尝试匹配的表达式中存在换行符。
最终评论:请在将结果字符串添加到URL_Params
之前对其进行网址编码。这使得完整的陈述:
Dim URL_Params As String = "&callback_params=" & WebUtility.UrlEncode(Regex.Match(HTML, "'block_competition_matches_summary', (\{.*?\})\);\n", RegexOptions.Singleline).Groups(1).Value)