PHP preg_replace反向引用导致未定义的常量通知

时间:2011-08-18 00:29:25

标签: php regex camelcasing

我正在尝试在code.google.com上使用NameCase作为php类。当我运行它时,我得到了这个通知,我不明白为什么。

  

PHP注意:使用未定义的常量Mc - 假设'Mc'in   namecase.php(54):第1行的正则表达式代码

53   if( preg_match('/\bMac[A-Za-z]{2,}[^aciozj]\b/', $str) || preg_match('/\bMc/', $str) ) {
54     $str = preg_replace("/\b(Ma?c)([A-Za-z]+)/e", "$1.ucfirst('\\2')", $str);
55     // Now correct for "Mac" exceptions
56     $str = preg_replace('/\bMacEvicius/','Macevicius', $str); // Lithuanian
57     $str = preg_replace('/\bMacHado/',   'Machado', $str);    // Portuguese
58     $str = preg_replace('/\bMacHar/',    'Machar', $str);
59     ...

是否可以采取任何措施来纠正代码,以免产生通知。

由于

1 个答案:

答案 0 :(得分:7)

您需要在替换时引用1美元,例如: "'$1'.ucfirst('\\2')"或更好,请使用preg_replace_callback。在PHP 5.3+中,您可以传递一个闭包,例如:

$str = preg_replace_callback(
    "/\b(Ma?c)([A-Za-z]+)/",
    function($m) { return $m[1] . ucfirst($m[2]); },
    $str
);