特殊文字を含む可能性のある文字列の最初の文字を大文字にしたいのです(これが、ucfirstがここでは無効な理由です)。次のコードがあります:
$string = 'ésta';
$pattern = '/^([^a-z]*)([a-z])/i';
$callback_fn = 'process';
echo preg_replace_callback($pattern, $callback_fn, $string);
function process($matches){
return $matches[1].strtoupper($matches[2]);
}
'éSta'を返しますが、'Ésta'が期待されていました...私の問題は使用しているパターンだと思いますが、(のように$pattern = '/\pL/u'
)さまざまな組み合わせを作成しましたが、適切な正規表現が見つかりませんでした。