PHP preg_replace обратная ссылка вызывает неопределенное постоянное уведомление - PullRequest
3 голосов
/ 18 августа 2011

Я пытаюсь использовать NameCase php класс на code.google.com .Когда я запускаю его, я получаю это уведомление и не понимаю, почему.

Примечание PHP: использование неопределенной константы Mc - предполагается, что 'Mc' в 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 Ответ

7 голосов
/ 18 августа 2011

Вам нужно указать $ 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
);
...