{[^ \ <] +)<\ / a>`和`(<a。+)<\ a =“”>`?

时间:2018-07-03 13:08:06

标签: html regex

我试图不捕获锚标记,所以我用了

(?!([^\<]+)<\/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+&@#\/%=~_|])
但这不起作用吗?

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

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

2 个答案:

答案 0 :(得分:1)

从不使用正则表达式解析html。只是不要。并发症太多了,使用htmlparser之类的方法就更容易了。该链接应该可以帮助您确定:https://tomassetti.me/parsing-html/如果您不想转到该链接,以下是不同解析器的要旨:

Java

  • 拉加托和杰里
  • HtmlCleaner
  • Jsoup

C#

  • AngleSharp
  • HtmlAgilityPack

Python

  • 标准库的HTML解析器
  • Html5lib
  • Html5-parser
  • Lxml
  • AdvancedHTMLParser
  • 美丽汤

JavaScript

  • 浏览器

    • jQuery
    • DOMParser
  • Node.js

    • Cheerio
    • Jsdom
    • Htmlparser2
    • Parse5

答案 1 :(得分:0)

尝试使用此:

(a\shref=".+"|\/?b|Google Homepage|\/?a)