【发布时间】:2009-06-29 15:12:44
【问题描述】:
我正在使用以下正则表达式来获取 HTML 文档中第一个 img 标记的 src 值。
string match = "src=(?:\"|\')?(?<imgSrc>[^>]*[^/].(?:jpg|png))(?:\"|\')?"
现在它捕获了我不需要的全部 src 属性。我只需要src 属性中的url。怎么做?
【问题讨论】:
我正在使用以下正则表达式来获取 HTML 文档中第一个 img 标记的 src 值。
string match = "src=(?:\"|\')?(?<imgSrc>[^>]*[^/].(?:jpg|png))(?:\"|\')?"
现在它捕获了我不需要的全部 src 属性。我只需要src 属性中的url。怎么做?
【问题讨论】:
用别的东西解析你的 HTML。HTML is not regular 因此正则表达式根本不适合解析它。
使用 HTML 解析器,如果 HTML 是严格的,则使用 XML 解析器。使用 XPath 获取 src 属性的值要容易得多:
//img/@src
XML 解析内置于System.Xml namespace。它非常强大。如果 HTML 不严格,HTML parsing 会有点困难,但是周围有很多库可以为您做到这一点。
【讨论】:
见When not to use Regex in C# (or Java, C++ etc)和Looking for C# HTML parser
PS,如何在评论中添加指向 StackOverflow 问题的链接?
【讨论】:
您的正则表达式应该(用英文)匹配引号后的任何字符,而不是 src 属性上标记内的引号。
在 perl 正则表达式中,它会是这样的:
/src=[\"\']([^\"\']+)/
运行后,URL 将位于$1。
当然,这假设您的 src 属性中的 url 被引用。如果[] 括号中的值不是,您可以相应地修改它们。
【讨论】: