[英]Character escaping in regular expression
我使用这个正则表达式来匹配包含 href 中特定单词的超链接
<a( .*?)? href=\".*?" + word + ".*?\"( .*?)?>.*?</a>
这将返回匹配链接的第一次出现
现在我需要找到具有相同匹配项的所有超链接,我已经尝试过这个正则表达式:
/<a [^>]*\bhref\s*=\s*"[^"]*word.*?<\/a>/
我在让编译器接受这个表达式时遇到了一些问题。 问题似乎是转义一些特殊字符。 看来这部分有问题
"[^"]
我尝试用 \\ 转义 [ ,并将 @ 放在双引号前面,但没有运气。
错误显示为“错误的编译常量值”。
有谁知道如何格式化这个正则表达式以满足编译器?
正则表达式不是解析 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
现在拥有您需要的所有链接。
是不是很简单!
虽然您可以转义字符串中需要转义的所有内容,但是当字符串被 @ 引用时,正则表达式更容易阅读。 然后你唯一需要担心的是双引号,它需要加倍。
string expression = @"/<a [^>]*\bhref\s*=\s*""[^""]*word.*?<\/a>/";
注意:正如评论所说,这个正则表达式可能会失败。 我还没有测试它,我只是修改它以使其编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.