我使用此正则表达式来匹配包含href
中特定单词的超链接<a( .*?)? href=\".*?" + word + ".*?\"( .*?)?>.*?</a>
这将返回匹配链接的第一个外观
现在我需要查找具有相同匹配项的所有超链接,我已经尝试过这个正则表达式:
/<a [^>]*\bhref\s*=\s*"[^"]*word.*?<\/a>/
我在使编译器接受此表达式时遇到一些问题。问题似乎是逃避一些特殊的角色。看来这部分是一个问题
"[^"]
我试图逃避[带\,并将@放在双引号前,但没有运气。
错误显示“错误的编译常量值”。
有谁知道如何格式化这个正则表达式以满足编译器的需要?
答案 0 :(得分:2)
正则表达式不是解析HTML文件的好方法..
您应该使用htmlagilitypack
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://yourWebSite.com");
List<String> hrefLst=doc.DocumentNode
.SelectNodes("//a[@href]")
.Select(x=>x.Attributes["href"].Value)
.Where(y=>y.Contains(word))
.ToList();
hrefLst
现在拥有您所需的所有链接。
不是那么简单!
答案 1 :(得分:1)
虽然您可以转义需要在字符串中转义的所有内容,但是当字符串为@ -quoted时,正则表达式更容易阅读。您需要担心的唯一问题是双引号,需要加倍。
string expression = @"/<a [^>]*\bhref\s*=\s*""[^""]*word.*?<\/a>/";
注意:正如评论所说,这个正则表达式可能会失败。我没有测试过它,我只是对它进行了修改以使其编译。