`?,html,regex"/>

首页 > 解决方案 > `([^\<]+)<\/a>`和`(`?

问题描述

我试图不捕获锚标签,所以我使用了这个

(?!([^\<]+)<\/a>)(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])

它排除了锚标签并选择了锚标签中不存在的网址,但在这种情况下失败:

<a href="www.google.com"> <b> Google Homepage </b> </a>
因为左角撑。

所以我想用这个

(?!(<a.+)<\/a>)(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])
但这不起作用?

任何人都请解释为什么这不起作用以及我的问题可能的解决方案是什么。

希望我解释了这个问题,在此先感谢您的帮助。

标签: htmlregex

解决方案


永远不要使用正则表达式来解析 html。只是不要。有太多不同的并发症,使用类似htmlparser的东西更容易。此链接应该可以帮助您做出决定:https ://tomassetti.me/parsing-html/如果您不想访问该链接,这里是不同解析器的要点:

爪哇

  • 拉加托和杰瑞
  • HtmlCleaner

C#

  • 锐角
  • HtmlAgilityPack

Python

  • 标准库的 HTML 解析器
  • html5lib
  • Html5-解析器
  • 文件格式
  • 高级HTML解析器
  • 美丽的汤

JavaScript

  • 浏览器

    • jQuery
    • DOM解析器
  • 节点.js

    • 切里奥
    • Jsdom
    • htmlparser2
    • 解析5

推荐阅读