使用preg_replace检查多个模式?

时间:2012-12-24 18:34:50

标签: php preg-replace design-patterns

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以简单地将URL模式传递给preg_replace(),如下所示:

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

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

答案 1 :(得分:1)

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

然后你可以替换网址/图片。然后,将iframe占位符替换为您之前匹配的iframe。

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

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