gpt4 book ai didi

php - 使用 RegEx 或 HTML 解析器的 HTML 提取 API

转载 作者:行者123 更新时间:2023-11-28 03:20:05 27 4
gpt4 key购买 nike

我知道公众舆论使用RegEx用于解析 HTML ;但是我看不出使用 RegEx 会有什么危害(在以前的 Scripting Languages 中使用 RegEx 添加了类似的功能,例如 _StringBetween( ) 中的 AutoIt3 )我想要实现的目标。

我也知道 _StringBetween( )不是专门HTML 编写的但我在HTML上一直在使用它,没有任何问题|过去 8 年与其他人一起的内容。

对于我的 HTML Extraction API我想展示以下 HTML

<div class="video" id="video-91519"><!-- The value of the identifier is dynamic-->
<a href="about:blank"><img src="silly.jpg"><!-- So is the href and src in a, img -->
</div>

API 的原因我想写的是提取 video_urlthumbnail非常容易,因此 HTML parser似乎遥不可及。我希望能够使用以下行中的内容来提取它

<div class="video" id="video-{{unknown}}">{{unknown}}<a href="{{video_url}}"><img src="{{thumbnail}}">{{unknown}}</div>

当然是在上一篇HTML你可以做得更容易,例如

<a href="{{video_url}}"><img src="{{thumbnail}}">

但我试图提供一个完美示例以避免混淆。

如何RegEx发挥作用? 好吧,我要替换 {{video_url}} , {{thumbnail}}{{unknown}}(.*?) , (.*?).*使用 /s当然还要确保没有多次出现 {{video_url}}{{thumbnail}}在提供的输入中(不是 HTML )。

所以,我有什么理由不使用 RegEx或者还是去买HTML parser包括。可接受的概念证明 RegEx和/或使用 HTML parser ?我无法个人看到如何使用 HTML parser 实现这一目标

最佳答案

我认为您构建问题的方式预先假定了解决方案:如果您希望能够指定要匹配的模式,那么您必须使用模式匹配语言,例如正则表达式。但是,如果您将问题定义为允许在文档中搜索内容,那么可能还有其他选项可用,例如编译为 XPath 表达式的基于路径的输入,或 jQuery 之类非常成功使用的 CSS 选择器。

您在这里构建的并不是真正的 HTML 提取 API,而是一个正则表达式处理 API - 您正在发明一种简化的模式匹配语言,它可以是编译为正则表达式,并将该正则表达式应用于任何字符串。

这本身并不是一件坏事,但如果该模式匹配 API 的 用户 尝试使用它来解析更复杂或不可预测的文档,他们将遇到与每个人在尝试使用正则表达式匹配 HTML 时都会遇到这种情况,再加上您的预处理器强加的额外限制。这些限制是简化语言的必然结果:您正在交换正则表达式引擎的一些功能,以使您的模式更加“用户友好”。

回到重构问题的想法,这里有一个简化的匹配 API 示例,它可以编译为 CSS 表达式(例如与 SimpleHTMLDOM 一起使用):

 Find: div (class:video)
Must-Contain: a, img
Match: id Against video-{{video_id}}
Child: a
Extract: href Into video_url
Child: img
Extract: src Into thumbnail

请注意,这种语言比 HTML 抽象得多;这有优点也有缺点。一方面,您问题中的简单匹配模式很容易基于单个示例创建。另一方面,它更容易受到 HTML 变化的影响,无论是由于网站的变化,还是页面内的变化,例如向少量视频添加额外的 CSS 类“精选视频”。基于选择器的示例要求用户了解 API 的更多细节,但如果他们一开始就不知道 HTML 和模式匹配,那么冗长的语法可能比包含大量含糊标点符号的语法更有帮助。

关于php - 使用 RegEx 或 HTML 解析器的 HTML 提取 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24953055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com