preg_replace_callback - 编译失败

时间:2014-10-22 12:17:48

标签: php regex

$lang_string = preg_replace_callback('/[LINK:([^:]+):([^:]+)](.+)[\/LINK]/m', function($match){
    return '<a href="'.get_subpage_url($match[1], $match[2]).'">'.$match[3].'</a>';
}, $lang_string);

查找

[LINK:functions:bankimport]Bankimport[/LINK]

替换为

'<a href="'.get_subpage_url('functions', 'bankimport').'">Bankimport</a>'

错误

preg_replace_callback(): Compilation failed: unmatched parentheses at offset 12

2 个答案:

答案 0 :(得分:1)

[是正则表达式中的特殊元字符。您需要转义[以匹配文字[符号,否则正则表达式引擎会将其视为字符类的开头。

\[LINK:([^:]+):([^:]+)](.+)\[\/LINK]

DEMO

答案 1 :(得分:1)

我现在无法在此测试,但我认为你必须绕过LINK-Tags周围的括号:

$lang_string = preg_replace_callback('/\[LINK:([^:]+):([^:]+)\](.+)\[\/LINK\]/m', function($match){
    return '<a href="'.get_subpage_url($match[1], $match[2]).'">'.$match[3].'</a>';
}, $lang_string);