【发布时间】:2012-04-13 14:39:46
【问题描述】:
我有一个带有如下标记代码的 HTML 页面:
<a href="#!/series/3078/series-name">
<span class="title">This is series # 1</span>
<span class="info">bla bla bla</span>
</a>
<a href="#!/series/3079/series-name-2">
<span class="title">This is series # 2</span>
<span class="info">bla bla bla</span>
</a>
<a href="#!/series/3080/series-name-3">
<span class="title">This is series # 3</span>
<span class="info">bla bla bla</span>
</a>
我需要获取“/series/”之后的数字和“title”类的内部跨度的文本。
如何在 PHP 上使用正则表达式来做到这一点?
感谢您的帮助
【问题讨论】:
-
@tchrist 我不同意。 HTML 上的正则表达式基本上有一种根本不起作用的用途,即验证用户输入的 HTML 以搜索
<script>标记等(参见“samy 是我的英雄”),以及一种它们非常有用的用途擅长,从 HTML 页面中获取列表等。但是,当您想从 DOM 中获取信息时,例如在这种情况下(来自<a>标记 + 来自特定子<span>的文本),则正则表达式不再适用。我会使用beautiful soup 来做到这一点,我不知道 PHP 有什么。 -
@cha0site 你可以保持尊重,但仍然是错误的,你就是这样。没有任何理由不在 HTML 上使用文本编辑器。人们总是这样做。
-
@Qtax:是的。但是,Stackoverflow 只能提供一个过时且技术上不太正确的笑话页面来解释新手的替代方案,这不是很尴尬吗?
-
@tchrist 我认为这里合适的拉丁语是 Quod licet Iovi, non licet bovi。您显然可以使用正则表达式处理任何解析。你真的在上面写了这本书。但是,当有人问“我正在尝试使用正则表达式解析 HTML,但无法弄清楚”时,正确的答案 是“好的,不要那样做,改用解析器” ,而不是向正则表达式添加另一个特殊情况。因为 HTML 解析器不像正则表达式库那样普遍但几乎一样普遍,而且它们非常擅长解析 HTML。
-
@tchrist "如果他们可以在文本编辑器中使用正则表达式,他们可以在文本编辑器之外使用相同的正则表达式" - 不,这是错误的。解决方案在一种情况下是合适的,并不能使它在另一种情况下正确。文本编辑器,您正在查看一些非常具体的垃圾并希望将其转换为您想要的垃圾,这是一种上下文。一个 PHP 脚本,它位于一个网络服务器上,只处理垃圾,而不需要你手动按摩输入,是另一个上下文。正则表达式适合第一种情况,如果您对输入有所了解,则第二种情况。但一般?