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

fko*_*ler 1 php regex string

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

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

诀窍.

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

任何帮助表示赞赏!

我也尝试过:

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

没有成功...

dec*_*eze 7

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

/(?<=( |-))./"任何字符(.)前面带((?<=))空格或短划线(( |-))".