【问题标题】:Check for multiple patterns with preg_replace?使用 preg_replace 检查多个模式?
【发布时间】:2012-12-24 18:34:49
【问题描述】:

我正在寻找验证提交帖子的解决方案。我想检查是否有人提交(在帖子中):

  • 用于嵌入 YouTube 或 Vimeo 视频的 Iframe,替换 Iframe 中使用的正确宽度
  • 一个 URL,替换为 HTML 可点击链接
  • 图像 URL,用 HTML 替换它

我能够为这些要求中的每一个找到正确的正则表达式,但是使用 3 个单独的 preg_replace 函数会导致干扰。例如,检测一个 URL 也会检测到 Iframe 内的 URL。

我已经在 Stackoverflow 和互联网的其他地方搜索过解决方案。但我不是专家,所以也许有人可以帮助我或指导我找到正确的教程/网站/操作方法...

【问题讨论】:

  • 您可以尝试一种模式来查找不在标签内的 URL。

标签: php preg-replace design-patterns


【解决方案1】:

您可以先将 iframe 与 preg_match 匹配,然后将其替换为占位符。

然后您可以替换 urls/images。然后,将 iframe 占位符替换为您之前匹配的 iframe。

您可以使用 preg_replace_callback 生成唯一的顺序占位符,这样您就可以运行一些代码来为每个替换增加一个 $placeholder_id。

这是一种通用策略,通常可以大大简化复杂的解析。

【讨论】:

  • 已经有一段时间了,但我想回到这个。你能解释一下你是如何使用 preg_replace_callback 的吗?我不完全理解回调函数。我需要做的是:查找 iFrames -> 用占位符替换它们 查找图像 -> 用占位符替换它们 查找 URL -> 用占位符替换它们并将它们全部重新组合在一起......
【解决方案2】:

您可以像这样简单地将 URL 模式数组传递给 preg_replace()

$pattern_array = array(
    '/somepattern/',
    '/someotherpattern/',
    '/yetanotherpattern/',
)
$replacement_array = array(
    'somereplacement',
    'someotherreplacement',
    'yetanotherreplacement'
}

$result = preg_replace($pattern_array, $replacement_array, $subject_string);

【讨论】:

  • 我明白了,谢谢!但是我该怎么处理替换,因为 3 种不同的模式需要 3 种不同的替换......
  • @DavidDuyff 也可以使用数组进行替换。请参阅编辑后的答案。
猜你喜欢
  • 1970-01-01
  • 2012-06-28
  • 2011-09-27
  • 1970-01-01
  • 2014-06-19
  • 2019-01-25
  • 1970-01-01
  • 2021-10-28
  • 2021-12-30
相关资源
最近更新 更多