html - `([^\<]+)<\/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+&@#\/%=~_|])
但这不起作用?
任何人都请解释为什么这不起作用以及我的问题可能的解决方案是什么。
希望我解释了这个问题,在此先感谢您的帮助。
解决方案
永远不要使用正则表达式来解析 html。只是不要。有太多不同的并发症,使用类似htmlparser
的东西更容易。此链接应该可以帮助您做出决定:https ://tomassetti.me/parsing-html/如果您不想访问该链接,这里是不同解析器的要点:
爪哇
- 拉加托和杰瑞
- HtmlCleaner
- 汤
C#
- 锐角
- HtmlAgilityPack
Python
- 标准库的 HTML 解析器
- html5lib
- Html5-解析器
- 文件格式
- 高级HTML解析器
- 美丽的汤
JavaScript
浏览器
- jQuery
- DOM解析器
节点.js
- 切里奥
- Jsdom
- htmlparser2
- 解析5
推荐阅读
- javascript - 如何自动显示多个图例 - 谷歌组合图
- android - 从多个状态流中收集
- gradle - 依赖版本是否会影响 Gradle 复合构建中包含的构建的替换?
- python - 在 Python 中创建一系列日期和特定时间
- oracle - Sqlbase 7 服务器 .uld 文件
- docker - 通过 kubernetes/skaffold 将私有 npm 存储库拉到 docker 容器
- r - %>% .$column_name 等效于 R 基管道 |>
- c++ - 如何使 sf::Vector2f transform(float t) 速度更快?
- linux - 无法使用 linux 终端删除 linux 目录
- swift - Swift:“'Any'类型的值没有成员'map'”,数组返回为Any类型