繁体   English   中英

正则表达式中的字符转义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM