2013-07-15 40 views
0

想要从锚标签获取href链接。我使用achor标签的正则表达式

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文件 请提出正确的正则表达式以上

+0

尝试不带第一个\ s,因为我无法在href之后发现空白。或者尝试\ s *这意味着“零个或多个”空格 – Manu

回答

2

你不应该真的试图用正则表达式来解析HTML,this本质上就是为什么。你可以看看一个健壮的HTML处理库,如HTML Agility Pack

This以前的SO帖子可能会有一些东西符合你正在做的事情。

+0

你是我的几秒钟(虽然我不相信这是一个答案 - 更多评论)。这种事情对于RegEx非常困难。我也建议使用HTML敏捷包http://htmlagilitypack.codeplex.com/ – Liath

+0

@Liath:是的HTML不应该与正则表达式处理。你为什么认为这应该是一个评论?我确实提出了一种OP所要求的替代方法,并且还包括了如何完成这项工作的信息。 – npinti

+0

只是因为这个问题是关于RegExes的,而不是我怎么能做到这一点...但是这只是问题的表述。我同意100%这是正确的方法。 – Liath

0

说明

此正则表达式将:

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

<a\b(?=\s)(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shr=.*?ef=3D['"]([^"]*)['"]?)(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?\/?>.*?<\/a>

enter image description here

示例文本

注意difficutl边缘情况下的onmouseover

<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/