0

我使用这个正则表达式来匹配在 href 中包含特定单词的超链接

<a( .*?)? href=\".*?" + word + ".*?\"( .*?)?>.*?</a>

这将返回匹配链接的第一次出现

现在我需要找到所有具有相同匹配的超链接,我已经尝试过这个正则表达式:

/<a [^>]*\bhref\s*=\s*"[^"]*word.*?<\/a>/

我在让我的编译器接受这个表达式时遇到了一些问题。问题似乎是转义了一些特殊字符。这部分好像有问题

"[^"]

我尝试用\转义[,并将@放在双引号前,但没有运气。

错误显示为“错误的编译常量值”。

有谁知道如何格式化这个正则表达式以满足编译器的要求?

4

2 回答 2

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现在有所有你需要的链接。

是不是很简单!

于 2013-06-06T07:22:35.880 回答
1

尽管您可以转义字符串中需要转义的所有内容,但是当字符串被 @-quoted 时,正则表达式更容易阅读。然后你唯一需要担心的是双引号,它需要加倍。

string expression = @"/<a [^>]*\bhref\s*=\s*""[^""]*word.*?<\/a>/";

注意:正如评论所说,这个正则表达式可能会失败。我没有测试它,我只是修改它以使其编译。

于 2013-06-06T07:16:16.577 回答