Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用正则表达式或HTML解析器的HTML提取API_Php_Html_Regex_Html Parsing_Html Parser - Fatal编程技术网

Php 使用正则表达式或HTML解析器的HTML提取API

Php 使用正则表达式或HTML解析器的HTML提取API,php,html,regex,html-parsing,html-parser,Php,Html,Regex,Html Parsing,Html Parser,我知道公众舆论不使用RegEx解析HTML;但是,我不认为使用RegEx(以前的脚本语言中已经添加了类似的函数,使用RegEx,例如\u StringBetween()中的AutoIt3)来实现我想要实现的目标会有什么害处 我也知道\u StringBetween()并不是专门为HTML编写的,但在过去的8年里,我和其他人一起使用它,在HTML内容方面没有任何问题 对于我的HTML提取API,我想展示以下HTML <div class="video" id="video-91519">

我知道公众舆论不使用
RegEx
解析
HTML
;但是,我不认为使用
RegEx
(以前的
脚本语言中已经添加了类似的函数,使用
RegEx
,例如
\u StringBetween()
中的
AutoIt3
)来实现我想要实现的目标会有什么害处

我也知道
\u StringBetween()
并不是专门为
HTML
编写的,但在过去的8年里,我和其他人一起使用它,在
HTML
内容方面没有任何问题

对于我的
HTML提取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>
当然,在前面的
HTML
中,您可以做得更简单,例如

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

但我试图给出一个完美的例子来避免混淆

RegEx
是如何发挥作用的?好的,我打算用
{video{u url}}
{{缩略图}}
{unknown}
替换为
(.*)
(.*)
*
使用
/s
,当然要确保在提供的输入中没有多次出现
{video{url}
{缩略图}}(不是
HTML


那么,我有没有理由不使用
RegEx
或者仍然使用
HTML解析器
,包括可接受的
RegEx
和/或使用
HTML解析器
?我个人不知道如何使用
HTML解析器
实现这一点,我认为你在之前就已经提出了这个问题upposes解决方案:如果您希望能够指定要匹配的模式,那么您必须使用模式匹配语言,例如regex。但是如果您将问题框定为允许搜索文档中的内容,那么其他选项可能可用,例如编译为XPath表达式的基于路径的输入,或者使用CSS选择器jQuery之类的人成功地实现了这一点

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

这本身并不是一件坏事,但如果模式匹配API的用户试图使用它来解析更复杂或不可预测的文档,他们将遇到与每个人在尝试使用正则表达式匹配HTML时遇到的问题相同的问题,再加上预处理器施加的附加限制。这些限制是不可避免的后果简化语言的必要性:为了使您的模式更加“用户友好”,您正在交换正则表达式引擎的一些功能

为了回到重新定义问题的想法,下面是一个简化的匹配API示例,可以编译为CSS表达式(例如,与一起使用):


请注意,这种语言要比HTML抽象得多;这有优点也有缺点。一方面,问题中的简单匹配模式很容易基于单个示例创建。另一方面,由于站点的更改或页面的变化,HTML中的变化会使它更脆弱添加额外的CSS类“特色视频”对于少量视频。基于选择器的示例要求用户了解API的更多细节,但如果他们一开始不知道HTML和模式匹配,详细的语法可能比涉及大量神秘标点符号的语法更有帮助。

API的用户对模式匹配和HTM知之甚少L.这意味着它的使用非常简单,我们打算在其上执行这些任务的文档远非复杂或不可预测。Henche,我正在寻找一个可以使模式匹配变得非常简单和用户友好的系统。也许,最终我会完全摆脱模式匹配,让我的
应用程序
找出什么根据缩略图和链接进行提取。我只是想确定这不是非常愚蠢,如果有更好的方法来实现相同的目标=)谢谢你的回答和时间。你认为我在其他评论中的陈述;这将是一个合适的解决方案(RegEx),或者您仍然会推荐您的建议/示例吗?最终决定权在您,但重要的是要认识到,这种方法存在真正的局限性,而不仅仅是偏见使人们避免使用RegEx进行通用HTML提取。也许一开始不要花太长时间来完善这部分代码,要知道它将继续使用现有的简单模式,或者需要用完全不同的方法来替换。顺便说一下,我没有提到您建议的正则表达式的一个特殊限制是,即使是非贪婪的
*?
也很容易消耗一大块文档,如果它发现一些看起来像是模式的开始,但没有立即遵循预期的内容。只要您的源文档是可预测的,那么这种情况是否会发生就很明显了,但这也是这种方法不具有可扩展性/健壮性的另一个原因。是的,我知道这一点。然而,人们认为某人不会理解您不能对不可预测/复杂的文档执行相同的操作,这是相当侮辱性的。我确实不打算对其进行太多的细化,因为这只是为了更快地开发模块。我只是假设可能有一些我不知道的原因来避免使用
RegEx
。非常感谢您的澄清!
<a href="{{video_url}}"><img src="{{thumbnail}}">
 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