用ucword替换所有大写单词

时间:2010-11-14 11:34:23

标签: php regex preg-replace

我遇到了小问题。我试图用句子替换单词,即

HELLO World WHAT

通过

Hello World What

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

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

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

任何帮助都会很棒。

欢呼声, /马尔钦

P.S。 这种方法并不好:ucwords(strtolower($ string));因为我想留下所有不是全部大写的内容。

2 个答案:

答案 0 :(得分:2)

如何使用:

ucwords(strtolower($string));

您可以将此方法与e修饰符结合使用:

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

答案 1 :(得分:2)

使用匿名函数而不是调用/e修饰符稍微有效一点。

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