使用PHP preg_replace转义捕获的表达式

时间:2011-07-07 23:02:58

标签: php regex preg-replace ckeditor

我正在与preg_replace挣扎,我真的希望有人能发现我的错误。正则表达似乎是我的阿基里斯脚跟。

我正在尝试用{{123.jpg}}

替换<img src="http://mydomain/some/path/123.jpg"></img>之类的字符串

我搜索了类似的问题并找到preg_quote,但我不相信我的替换字符串的非正则表达式中有任何正则表达式字符,所以我不知所措。

以下是我正在尝试的内容:

function replace($article_id,$text){
    $pattern = '/\{\{(.*?)\}\}/';
    $replacement = '<img src="'.URL_CONSTANT.'articles/'.$article_id.'/'.'${1}'.'"></img>';
    return preg_replace($pattern, $replacement, $text);
}

我可以确认模式是匹配的,但它没有正确替换。我认为这个问题可能与/替换之前的最终${1}有关,但我不明白为什么因为我不相信它是一个特殊的正则表达式字符。

感谢任何帮助!

编辑:我发现这个问题与我的表达无关。感谢所有协助验证我的表达形式正确的人!

1 个答案:

答案 0 :(得分:1)

感谢所有帮助过的人!我发现问题不是正则表达式,而是CKEditor的“scayt”自动更正插件。它将{{124.jpg}}快捷方式标签转换为跨度,因为它将它们检测为拼写错误的单词。我写了另一个正则表达式,删除了这些跨度,并用原始{{abc.def}}格式替换它们。这似乎解决了这个问题。