在php中,如何使用符号后的第一个大写字符?

在php中,如何使用符号后的第一个大写字符?,php,Php,我有一个示例代码: $foo = 'hello world'; $foo = ucwords($foo); // Hello World 但我还有一个示例代码: $foo = 'hello-world'; $foo = ucwords($foo); 结果如何是Hello World使用preg\u replace\u回调 $foo = 'hello-world'; $foo = ucwordsEx($foo); echo $foo; // Hello-World 使用的功能 functi

我有一个示例代码:

$foo = 'hello world';
$foo = ucwords($foo); // Hello World
但我还有一个示例代码:

$foo = 'hello-world';
$foo = ucwords($foo);

结果如何是
Hello World

使用
preg\u replace\u回调

$foo = 'hello-world';
$foo = ucwordsEx($foo); 
echo $foo; // Hello-World
使用的功能

function ucwordsEx($str) {
    return preg_replace_callback ( '/[a-z]+/i', function ($match) {
        return ucfirst ( $match [0] );
    }, $str );
}

很久以前我不得不解决这个问题。这将保留字符串中的连字符、空格和其他字符,并在任何单词边界上大写

// Convert a string to mixed-case on word boundaries.
function my_ucfirst($string) {
        $temp = preg_split('/(\W)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
        foreach ($temp as $key => $word) {
                $temp[$key] = ucfirst($word);
        }
        return join ('', $temp);
}

-
拆分,该数组的每个部分都大写,然后按
-
联接(除非破折号和空格出现在同一字符串中并且应该保留)。OP要求在字符
-
之后大写,而不是在非字母之后。对于这样一个基本的情况,我不太清楚我对正则表达式的开销有何感受。@L105问题的标题是“symbol-”,然后在示例中使用symbol
-
。在发表负面评论之前,先看看别人对糟糕英语的看法和理解。研究
如何产生结果是Hello World
。。标题可能会产生误导,为什么不在
\w
之后的第一个
\w
的基础上使用
preg\u replace()
ucfirst()
,以减少拆分的开销,然后加入?@BLaZuRE,这应该是可行的。在原文中,我还将所有其他字母转换为小写,尽管在这个问题中没有要求这样做。我八年前也写过这段代码……如果我只做一个转换,比如
ucfirst()
,我可能会做一个
preg\u replace\u回调
(在单词边界上拆分,而不是在字母串上拆分)。这里唯一真正的优势是,有几个点需要添加额外的转换(就像我在本例中剥离的那些转换)。有很多方法可以做到这一点,而“正确”的方法将由原始问题中没有给出的问题决定。@BLaZuRE-Hm。我想也许不再需要这个标志了。我将不得不回顾所有的古代版本,并试图找出它为什么会出现在那里。。。