preg_replace,无法插入' \' '

时间:2014-04-29 17:57:12

标签: php

我想定义类似的内容:

preg_replace('é','\\\'{e}', 
    preg_replace('à','\\`{a}',
    preg_replace('è','\\`{e}',
    preg_replace('ì','\\`{i}', 
    preg_replace('ò','\\`{o}', 
    preg_replace('ù','\\`{u}',$text))))))

我想替换

è --> \'{e}
à --> \`{a} and so on

我总是得到

Warning: preg_replace(): No ending delimiter '�' found in /var/www/html/..../ on line 22 

2 个答案:

答案 0 :(得分:1)

我建议不要在这里使用preg_replace,不需要正则表达式,因为有更好的方法:

$find = array('é', 'à', 'è', 'ì', 'ò', 'ù');
$repl = array("\\'{e}", "\\`{a}", "\\`{e}", "\\`{i}", "\\`{o}", "\\`{u}");
$text = str_replace($find, $repl, $text);

但是作为您的问题,除了没有定义分隔符之外,您还错误地嵌套了preg_replace。我可以通过preg_replace_callback来完成您所需的工作,因为我注意到您需要 单引号 来表示某些重音字符和 急性 为其他人:

更新#1:使用preg_replace_callback

$text = preg_replace_callback(
    '@é|à|è|ì|ò|ù@',
    function ($match)
    {
        return ($match[0] == 'é') ? "\\'é" : "\\`$match[0]";
    },
    $text
 );

答案 1 :(得分:1)

您在模式中缺少/。 试试这个:

preg_replace('/é/','\\\'{e}', 
preg_replace('/à/','\\`{a}', 
preg_replace('/è/','\\`{e}', 
preg_replace('/ì/','\\`{i}', 
preg_replace('/ò/','\\`{o}', 
preg_replace('/ù/','\\`{u}',$text))))))