preg_replace引号后将字母大写

2022-08-30 20:13:35

我有这样的名字:

$str = 'JAMES "JIMMY" SMITH'

我运行 ,然后 ,返回以下内容:strtolowerucwords

$proper_str = 'James "jimmy" Smith'

我想将第二个单词字母大写,其中第一个字母是双引号。这是正则表达式。看起来 strtoupper 不起作用 - 正则表达式只是返回未更改的原始表达式。

$proper_str = preg_replace('/"([a-z])/',strtoupper('$1'),$proper_str);

有什么线索吗?谢谢!!


答案 1

也许最好的方法是使用preg_replace_callback()

$str = 'JAMES "JIMMY" SMITH';
echo preg_replace_callback('!\b[a-z]!', 'upper', strtolower($str));

function upper($matches) {
  return strtoupper($matches[0]);
}

您可以使用(eval)标志,但我通常建议不要这样做。特别是在处理外部输入时,它可能非常危险。epreg_replace()


答案 2

使用 - 但您不需要添加额外的命名函数,而是使用匿名函数。preg_replace_callback

$str = 'JAMES "JIMMY" SMITH';
echo preg_replace_callback('/\b[a-z]/', function ($matches) {
     return strtoupper($matches[0]);
}, strtolower($str));

从 PHP 5.5 开始弃用 ,并且在 PHP 7 中不起作用/e


推荐