【问题标题】:Regex to get src value from an img tag正则表达式从 img 标签获取 src 值
【发布时间】:2009-06-29 15:12:44
【问题描述】:

我正在使用以下正则表达式来获取 HTML 文档中第一个 img 标记的 src 值。

string match = "src=(?:\"|\')?(?<imgSrc>[^>]*[^/].(?:jpg|png))(?:\"|\')?"

现在它捕获了我不需要的全部 src 属性。我只需要src 属性中的url。怎么做?

【问题讨论】:

    标签: c# html regex


    【解决方案1】:

    用别的东西解析你的 HTML。HTML is not regular 因此正则表达式根本不适合解析它。

    使用 HTML 解析器,如果 HTML 是严格的,则使用 XML 解析器。使用 XPath 获取 src 属性的值要容易得多:

    //img/@src
    

    XML 解析内置于System.Xml namespace。它非常强大。如果 HTML 不严格,HTML parsing 会有点困难,但是周围有很多库可以为您做到这一点。

    【讨论】:

    • 他不是要解析 html,而是简单地从 html 中的单一类型标签中提取一个值。正则表达式擅长这类事情。
    • @eqbridges:他提出的正则表达式如此复杂这一事实表明这是解决问题的错误方法。然后是它不匹配 src 属性的所有可能值(即包含 ' 或 ")的事实。不要以这种方式解析 HTML/XML!只是不要这样做!
    • @Welbog -- 如果他只需要获取 img src 的值,我不同意。在这样的任务上使用 HTML 解析器是矫枉过正的。如果他需要做任何特别复杂的事情,那么我更有可能同意。
    • @eqbridges:你称之为矫枉过正,我称之为简单。 "//img/@src" 比 "src=(?:\"|\')?(?[^>]*[^/].(?:jpg|png ))(?:\"|\')?",最重要的是它实际上是正确的。
    • @Jeff Davis:XPath、XQuery 和 XSL 都与 XML 相关,与任何其他编程语言无关。
    【解决方案2】:

    见When not to use Regex in C# (or Java, C++ etc)和Looking for C# HTML parser

    PS,如何在评论中添加指向 StackOverflow 问题的链接?

    【讨论】:

    • 只需发布网址,您就有 600 个字符可以发表评论。
    【解决方案3】:

    您的正则表达式应该(用英文)匹配引号后的任何字符,而不是 src 属性上标记内的引号。

    在 perl 正则表达式中,它会是这样的:

    /src=[\"\']([^\"\']+)/
    

    运行后,URL 将位于$1。

    当然,这假设您的 src 属性中的 url 被引用。如果[] 括号中的值不是,您可以相应地修改它们。

    【讨论】:

    • 为我工作得很好。我的要求只是使用非常特定的模式提取子字符串。源字符串恰好是 HTML 的事实是无关紧要的。我不是在尝试解析 HTML,而且我同意上述评论者的观点,即拿出一个完整的 HTML 解析器来完成这个简单的任务是矫枉过正的。
    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多