【问题标题】:php regex: find content between html tagsphp regex:在 html 标签之间查找内容
【发布时间】:2014-04-08 18:49:03
【问题描述】:

我正在尝试获取两个不同 <tags> 之间的 html 内容。这是我当前的正则表达式:

preg_match("/<h1>(\s+)<span class=\"fn edit\">([^$]+)<\/span>(\s+)<\/h1>/", $source, $return)

现在它工作得很好,除非 $ 符号位于源代码中。显然我的正则表达式是错误的,但我找不到合适的正则表达式来返回两个 <h1><span> 标记之间的所有 html。

您可以在此处查看我的实时正则表达式: http://regex101.com/r/eT1fF2

【问题讨论】:

  • 你想提取什么?发布预期的输出。
  • 使用除 / 之外的其他字符来分隔模式,因此您不必转义 \/。试试 # 或 ~。可能 $ 被解释为 "-delimited 字符串中的变量。尝试转义它 \$。您可能需要使用 's' 标志,以便它不会在行尾结束。有 PHP将 HTML 解析为树结构的库——考虑使用它们。
  • 不要使用正则表达式解析 HTML。使用适当的 HTML 解析模块。 您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。请参阅htmlparsing.com/phpthis SO thread,了解如何使用已经编写、测试和调试过的 PHP 模块正确解析 HTML。

标签: php regex html-parsing


【解决方案1】:

现在它工作得很好,除非 $ 符号位于 来源。

如果你想拥有$,你不能像使用字符类[^$]那样否定它。相反,您可以使用. 和修饰符s (PCRE_DOTALL) 或\C

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2016-01-12
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多