Php 用ucword替换所有大写单词

Php 用ucword替换所有大写单词,php,regex,preg-replace,Php,Regex,Preg Replace,我有点小问题。我试图替换句子中的单词,例如 HELLO World WHAT 借 到目前为止,我们有办法检测到它: preg_replace('/(\b[A-Z][A-Z]+\b)/sm','$1', $string); 但是它没有任何作用,因为我不能把它作为参数(“$1”) 任何帮助都会很好 干杯, /马辛 附言。 这种方法不好:ucwords(strtolower($string));因为我想保留所有不完整的大写字母。使用: ucwords(strtolower($string));

我有点小问题。我试图替换句子中的单词,例如

HELLO World WHAT

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

preg_replace('/(\b[A-Z][A-Z]+\b)/sm','$1', $string);
但是它没有任何作用,因为我不能把它作为参数(“$1”)

任何帮助都会很好

干杯, /马辛

附言。 这种方法不好:ucwords(strtolower($string));因为我想保留所有不完整的大写字母。

使用:

ucwords(strtolower($string));
您可以将此方法与
e
修饰符结合使用:

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

ucwords(strtolower($string));
您可以将此方法与
e
修饰符结合使用:

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

使用匿名函数比调用
/e
修饰符稍微有效一些

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

使用匿名函数比调用
/e
修饰符稍微有效一些

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

这不是所有大写字母都应该保留的方式,但是感谢使用regexp的修改-现在应该只在所有大写字母上工作。但是,您没有在那行代码中使用
/e
修饰符?这不是所有大写字母都应该保留的方式,但是感谢修改为使用regexp-现在应该只在所有的caps上工作。但是,你没有在那行代码中使用
/e
修饰符吗?替换字符串基本上在每次替换时都会被传递到PHP中,而回调方法只需要传递一次。很好,我已经发布了另一个regex问题,你也可以帮忙吗:-谢谢你需要小心使用create函数,但是,如果你有很多行要处理,它可能会超出允许的内存,因此对于大数据集来说并不好,尽管效率很高,替换字符串基本上是为每次替换传递到PHP中,与只需要传递一次的回调方法不同。很好,我已经发布了其他正则表达式问题,您也能帮忙吗:-谢谢您需要小心创建函数,但是,如果您有很多行要处理,它可能会超出允许的内存,因此尽管效率很高,但对大数据集来说并不好