3

我正在尝试在code.google.com上使用 NameCase 一个 php 类。当我运行它时,我会收到此通知,但我不明白为什么。

PHP 注意:在 namecase.php(54) 中使用未定义的常量 Mc - 假定为“Mc”:第 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     ...

有什么办法可以纠正代码,这样它就不会产生通知。

谢谢

4

1 回答 1

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
);
于 2011-08-18T00:34:20.277 回答