单独的正则表达式在这里不起作用.但是,您可以使用
preg_replace_callback:
$val = 'hello_world_again';
function match_toupper($m) {
return strtoupper($m[1]);
}
$val = preg_replace_callback('/(?:^|_)([a-z])/', 'match_toupper', $val);
echo $val; // HelloWorldAgain
在PHP 5.3或更高版本中,也可以使用anonymous function:
$val = 'hello_world_again';
$val = preg_replace_callback('/(?:^|_)([a-z])/',
function ($m) {
return strtoupper($m[1]);
}, $val);
echo $val; // HelloWorldAgain
此外,如果您忽略有关e modifier的所有警告和注意事项,这也将起作用:
$val = 'hello_world_again';
$val = preg_replace('/(?:^|_)([a-z])/e', 'strtoupper($1)', $val);
echo $val; // HelloWorldAgain
这是另一种完全避免使用正则表达式的解决方案:
$val = 'hello_world_again';
$val = implode('', array_map(ucfirst, explode('_', $val)));
echo $val; // HelloWorldAgain