1

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

$string = preg_replace('/[^a-zA-Z-\s]/s', '', $string);
$string = ucwords(strtolower($string));

成功了。

但是,我找不到将破折号后的每个字母大写的方法,尽管这个正则表达式似乎匹配破折号后的每个字母(如果我相信答案)。

任何帮助表示赞赏!

我也试过:

$string = preg_replace('#\b[a-z0-9-_]+#i', strtoupper("$0"), $string);

没有成功...

4

1 回答 1

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

/(?<=( |-))./前面有 ( )空格或破折号 ( ) 的任何字符 ( .) ”(?<=)( |-)

于 2012-08-10T09:57:09.210 回答