破折号或空格后的每个字母大写(PHP)

时间:2012-08-10 09:49:52

标签: php regex string

我正试图在空格和破折号之后将每个字母大写。 显然,在空格之后将每个字母大写都不是问题:

$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);

没有成功......

1 个答案:

答案 0 :(得分:7)

preg_replace_callback('/(?<=( |-))./',
                      function ($m) { return strtoupper($m[0]); },
                      $string);

/(?<=( |-))./ “任何字符(.preceded by ((?<=))空格或短划线(( |-))”