【问题标题】:Regular Expression for achor tag锚标记的正则表达式
【发布时间】:2013-07-15 22:04:25
【问题描述】:

想从锚标签中获取href链接。我正在使用

regex = @"<a[^>]*?href\s*=3D\s*[""']?    ([^'"" >]+?)[ '""][^>]*?>". 

如果href在单行,我可以成功,但在下面失败

Text = <a target=3D"_blank" hr=
ef=3D"http://abc.com/blog/check-your-cars-health-before-going-on-lo=
ng-trip/">

正在读取的文件是 eml 文件而不是 html 文件 请为上述建议正确的正则表达式

【问题讨论】:

  • 在没有第一个 \s 的情况下尝试它,因为我无法在 href 之后发现空格。或者尝试 \s* 这意味着“零个或多个”空格

标签: asp.net regex


【解决方案1】:

您不应该真正尝试使用正则表达式解析 HTML,this 本质上就是原因。您可以查看强大的 HTML 处理库,例如 HTML Agility Pack

This 之前的 SO 帖子可能有一些与您正在做的事情类似的事情。

【讨论】:

  • 你比我早了几秒钟(尽管我真的不相信这是一个答案 - 更多的是评论)。 RegEx 很难做到这一点。我还建议使用 HTML Agility Pack htmlagilitypack.codeplex.com
  • @Liath:是的,不应使用正则表达式处理 HTML。为什么你认为这应该是一个评论?我确实提出了一种替代 OP 要求的方法,并且还包含了有关如何做到这一点的信息。
  • 这仅仅是因为问题是关于 RegExes 而不是我该如何做到这一点......但这只是问题的措辞。我 100% 同意这是正确的方法。
  • 我认为您的第一个线索将在 OP not a html file Kindly suggest correct regex for above
【解决方案2】:

说明

这个正则表达式将:

  • 在锚标签内找到href属性值
  • 避免一些困难的边缘情况

&lt;a\b(?=\s)(?=(?:[^&gt;=]|='[^']*'|="[^"]*"|=[^'"][^\s&gt;]*)*?\shr=.*?ef=3D['"]([^"]*)['"]?)(?:[^&gt;=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?\/?&gt;.*?&lt;\/a&gt;

示例

示例文本

注意鼠标悬停中的困难边缘情况

<a onmouseover=' href="NotTheHrefYoureLookingFor" ; funRotator(href) ; ' target=3D"_blank" href="http://abc.com/blog/check-your-cars-health-before-going-on-lo= ng-trip/">link text </a>

捕获组

[0] => <a onmouseover=' href=" hr=
ef=3D NotTheHrefYoureLookingFor" ; funRotator(href) ; ' target=3D"_blank" hr=
ef=3D"http://abc.com/blog/check-your-cars-health-before-going-on-lo=
ng-trip/">link text
</a>
[1] => http://abc.com/blog/check-your-cars-health-before-going-on-lo=
ng-trip/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多