【问题标题】:PHP regex to get contents of a specific span elementPHP正则表达式获取特定跨度元素的内容
【发布时间】:2009-01-23 10:41:12
【问题描述】:

我需要一些帮助...当谈到正则表达式时,我有点(阅读总数)n00b,并且需要一些帮助来编写一个从 PHP 中查找包含在特定 HTML 标记中的特定文本。

源字符串如下所示:

<span lang="en">English Content</span><span lang="fr">French content</span> ... etc ...

我想只提取特定语言的元素文本。

谁能帮忙?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    有很多可用于 PHP 的 HTML 解析器。我建议您查看其中之一(例如:PHP Simple HTML DOM Parser)。

    尝试使用正则表达式阅读 HTML 比您想象的要容易得多,也比您希望的要避免得多(尤其是当您不完全了解正则表达式,并且您的输入不能保证是 100% 干净的 HTML)。

    【讨论】:

    • 感谢您的想法,您可能是对的。我认为一个简单的正则表达式将是实现这一目标的最快和最简单的方法,因为我没有解析整个 HTML 文档,只是一个看起来像示例的小字符串。
    • 那么你最好还是通过两次调用 strpos() 来获取你需要的子字符串的索引。
    • 请注意; PHP 5.x 包括 SimpleXML DOM 解析器,它使这种事情变得简单明了。您可以轻松地使用 XPath 查询来遍历 DOM 并挑选出您需要的部分。
    • 它是否也处理(可能格式错误的)HTML?
    【解决方案2】:

    (坏,不工作)示例说明了为什么不应该使用正则表达式来解析 html。

    /<span lang="en">(.*)<\/span>/
    

    将输出:

    English Content</span><span lang="fr">French content
    

    阅读更多内容:

    Parsing: Beyond Regex

    For-the-2,295,485th-time-DO-NOT-PARSE-HTML-WITH-REGULAR-EXPRESSIONS

    【讨论】:

    • 没有。这就是我所说的“朝自己的脚开枪”的意思。
    • 我同意使用正则表达式解析 html 不是您想要做的事情,但我试图回答这个问题。
    • 抱歉,这至少在两个方面是错误的(如果您无法确定哪两个方面,这就是您应该使用解析器的一个很好的理由)。
    • @cletus: lol :-) @Karsten:如果你想找出错误号。 1,只需针对给定的示例运行您的正则表达式。
    • 谢谢你的想法,卡斯滕。我稍微修改了一下,它对我有用:(.*?)
    【解决方案3】:

    这个最棒的类可以让您在 HTML 页面上执行类似 SQL 的查询。可能值得一看:

    HTML SQL

    我用过很多次,我很喜欢。

    希望对您有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2011-02-11
      相关资源
      最近更新 更多