我正在尝试在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 ...
是否可以采取任何措施来纠正代码,以免产生通知。
由于
答案 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
);