用 ucword 替换所有大写单词

问题描述 投票:0回答:3

我遇到了一个小问题。我正在尝试替换句子中的单词,即

HELLO World WHAT

Hello World What

到目前为止有办法检测它:

preg_replace('/(\b[A-Z][A-Z]+\b)/sm','$1', $string);

但它没有任何作用,因为我不能将 ucwords('$1') 作为参数。

任何帮助都会很棒。

干杯, /马辛

附注 这种方法不好: ucwords(strtolower($string));因为我想保留所有不全大写的内容。

php regex preg-replace
3个回答
2
投票

使用匿名函数比调用

/e
修饰符稍微更有效。

   $formatted = preg_replace_callback(
        '/(\b[A-Z][A-Z]+\b)/',
        create_function(
            '$matches',
            'return ucwords(strtolower($matches[0]));'
        ),
        $string
    );

2
投票

使用如何:

ucwords(strtolower($string));

您可以将此方法与

e
修饰符结合使用:

preg_replace('/(\b[A-Z][A-Z]+\b)/sme','ucwords(strtolower($1))', $string);

0
投票

通过调用多字节安全本机函数

mb_convert_case()
并指定标题大小写标志,可以最优雅地实现您想要的结果。 演示

$string = 'HELLO World WHAT';

echo mb_convert_case($string, MB_CASE_TITLE);
// Hello World What
© www.soinside.com 2019 - 2024. All rights reserved.