【问题标题】:PHP preg_match_all multiple HTML tagsPHP preg_match_all 多个 HTML 标签
【发布时间】:2016-06-24 10:29:12
【问题描述】:

我正在寻找使用单个正则表达式来查找 2 多种标签。我在另一个关于这个主题的问题中发现,它使用 | 来制作 (p|h1|table) 外观语法,它似乎对我不起作用。

我原来只查找 iframe 的模式

$removeiframe = preg_replace("#<iframe[^>]+>.*?</iframe>#is", "", $descriptiontext);

我尝试使用的模式:

$removeiframe = preg_replace("#<(iframe|img)[^>]+>.*?</(iframe|img)>#is", "", $descriptiontext);

我目前得到的最后一个模式的响应:

如果文本包含单个 iframe,则返回。

如果文本包含多个 iframe,则返回 this

[
    [0] => '<iframe></iframe>'
    [1] => '<img></img><iframe></iframe>'
]

以及我想要得到的东西

[
    [0] => '<iframe></iframe>',
    [1] => '<img></img>',
    [2] => '<iframe></iframe>',
]

【问题讨论】:

  • 正则表达式不是处理 HTML 或 XML 文档的好方法。改用 XML 解析器(DOMDocument)
  • 使用反向引用 (\\1) 而不是第二个替代列表。
  • 嘿@MaximKrizhanovsky 我完全忘了写我是如何使用它的。这用作描述字段,而您可以粘贴到 iframe 中,它会自动从文本中挑选出来并将其放置在其他地方。整个字段是一个文本区域。这仍然可以使用 DOMDocument 吗?
  • @mario 你的建议也没有奏效,结果根本没有找到任何东西..
  • @Kjaal 是的,您可以从字符串加载 HTML 并使用 DOM 操作遍历节点。

标签: php iframe expression preg-match-all


【解决方案1】:

你应该为此使用 Ungreedy 表达式(添加 U 标志)

【讨论】:

  • 你不应该使用正则表达式来消费标记,即使这样:这是一个评论,而不是一个答案
  • @EliasVanOotegem 如果他给出一个编码示例会更好,但这绝对是一个答案(它可能不是正确的答案,但这就是赞成/反对票的目的)。 See this Meta post for why
猜你喜欢
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 2014-06-11
  • 2015-06-24
  • 1970-01-01
  • 2013-05-01
相关资源
最近更新 更多