正则表达式解析超链接和描述
时间:2020-03-05 18:42:53 来源:igfitidea点击:
C#:什么是解析超链接及其描述的好的Regex?
请考虑大小写不敏感,空格以及HREF标记周围使用单引号(而不是双引号)的情况。
还请考虑获取在<a>标签内具有其他标签的超链接,例如<b>和<i>。
解决方案
回答
我发现了这一点,但显然这些家伙对此有一些问题。
编辑:(有效!)
我现在已经完成了自己的测试,发现它可以正常工作,我不知道Cso,我不能给你Canswer,但是我确实知道PHP,这是在此上运行它返回的matchs数组:
<a href="pages/index.php" title="the title">Text</a> array(3) { [0]=> string(52) "Text" [1]=> string(15) "pages/index.php" [2]=> string(4) "Text" }
回答
只要没有嵌套标签(没有换行符),以下变体就可以很好地工作:
<a\s+href=(?:"([^"]+)"|'([^']+)').*?>(.*?)</a>
一旦嵌套标签起作用,正则表达式就不适合解析。但是,我们仍然可以通过应用现代解释器的更多高级功能(取决于正则表达式计算机)来使用它们。例如。 .NET正则表达式使用堆栈;我找到了这个:
(?:<a.*?href=[""'](?<url>.*?)[""'].*?>)(?<name>(?><a[^<]*>(?<DEPTH>)|</a>(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?:</a>)
资料来源:http://weblogs.asp.net/scottcate/archive/2004/12/13/281955.aspx
回答
我有一个可处理大多数情况的正则表达式,尽管我相信它确实与多行注释中的HTML匹配。
它使用.NET语法编写,但应易于翻译。
回答
请参阅StackOverflow的以下示例:用于解析网页链接的正则表达式?
使用HTML Agility Pack,我们可以解析html,并使用HTML的语义(而不是损坏的正则表达式)提取详细信息。
回答
现在,只要我可以使用它,就将它扔掉。..这是之前建议的一个不太贪婪的版本。如果输入具有多个超链接,则原始的行不通。下面的代码将允许我们循环浏览所有超链接:
static Regex rHref = new Regex(@"<a.*?href=[""'](?<url>[^""^']+[.]*?)[""'].*?>(?<keywords>[^<]+[.]*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled); public void ParseHyperlinks(string html) { MatchCollection mcHref = rHref.Matches(html); foreach (Match m in mcHref) AddKeywordLink(m.Groups["keywords"].Value, m.Groups["url"].Value); }
回答
这是一个匹配平衡标签的正则表达式。
(?:""'[""'.. *?>)(?(?>(?)|(?<-DEPTH>)| ..)+)(?(DEPTH)(?!))(?: )