短划线后PHP大写

mrl*_*nce 10 php

$q = durham-region;

$q = ucfirst($q);

$q = Durham-region;
Run Code Online (Sandbox Code Playgroud)

在破折号(达勒姆地区)之后,我如何将这封信大写?我是否必须将两者分开并大写?

Kel*_*lly 16

更新方案

从PHP 5.5开始,不推荐使用e修饰符preg_replace.现在最好的选择是使用其中一个不使用它的建议,例如:

$q = preg_replace_callback('/(\w+)/g', create_function('$m','return ucfirst($m[1]);'), $q)
Run Code Online (Sandbox Code Playgroud)

要么

$q = implode('-', array_map('ucfirst', explode('-', $q)));
Run Code Online (Sandbox Code Playgroud)

原始答案

你可以使用preg_replace使用e修饰符是这样的:

$test = "durham-region";
$test = preg_replace("/(\w+)/e","ucfirst('\\1')", $test);
echo $test;
// Durham-Region
Run Code Online (Sandbox Code Playgroud)


Ali*_*xel 9

使用ePCRE修饰符不会影响的单线程:

$str = implode('-', array_map('ucfirst', explode('-', $str)));
Run Code Online (Sandbox Code Playgroud)


Ale*_*ank 6

感谢PHP 5.4.32和5.5.16之后的delimiter参数ucwords,它就像这样简单:

$string = ucwords($string, "-");
Run Code Online (Sandbox Code Playgroud)