我遇到了一个小问题。我正在尝试替换句子中的单词,即
HELLO World WHAT
由
Hello World What
到目前为止有办法检测它:
preg_replace('/(\b[A-Z][A-Z]+\b)/sm','$1', $string);
但它没有任何作用,因为我不能将 ucwords('$1') 作为参数。
任何帮助都会很棒。
干杯, /马辛
附注 这种方法不好: ucwords(strtolower($string));因为我想保留所有不全大写的内容。
使用匿名函数比调用
/e
修饰符稍微更有效。
$formatted = preg_replace_callback(
'/(\b[A-Z][A-Z]+\b)/',
create_function(
'$matches',
'return ucwords(strtolower($matches[0]));'
),
$string
);
使用如何:
ucwords(strtolower($string));
您可以将此方法与
e
修饰符结合使用:
preg_replace('/(\b[A-Z][A-Z]+\b)/sme','ucwords(strtolower($1))', $string);
通过调用多字节安全本机函数
mb_convert_case()
并指定标题大小写标志,可以最优雅地实现您想要的结果。 演示
$string = 'HELLO World WHAT';
echo mb_convert_case($string, MB_CASE_TITLE);
// Hello World What