我正试图在空格和破折号之后将每个字母大写。 显然,在空格之后将每个字母大写都不是问题:
$string = preg_replace('/[^a-zA-Z-\s]/s', '', $string);
$string = ucwords(strtolower($string));
诀窍。
但是,我找不到一种方法可以在短划线之后将每个字母大写,尽管this regex似乎与短划线后的每个字母相匹配(如果我相信答案)。
感谢任何帮助!
我也尝试过:
$string = preg_replace('#\b[a-z0-9-_]+#i', strtoupper("$0"), $string);
没有成功......
答案 0 :(得分:7)
preg_replace_callback('/(?<=( |-))./',
function ($m) { return strtoupper($m[0]); },
$string);
/(?<=( |-))./
“任何字符(.
)preceded by ((?<=)
)空格或短划线(( |-)
)”。