サンプル文字列は次のとおりです。
hello_world_again
したがって、次のように変換されます。
HelloWorldAgain
したがって、アンダースコアを削除して次の文字を大文字にすることができるはずです。最初の文字も大文字にする必要があります。私はこれを見つけました:preg_replace('/(?<! )(?<!^)[A-Z]/', '_$0', $val)
しかし今、私はプロセスを逆にしたいと思っています。多くの助けをいただければ幸いです!ありがとう!
サンプル文字列は次のとおりです。
hello_world_again
したがって、次のように変換されます。
HelloWorldAgain
したがって、アンダースコアを削除して次の文字を大文字にすることができるはずです。最初の文字も大文字にする必要があります。私はこれを見つけました:preg_replace('/(?<! )(?<!^)[A-Z]/', '_$0', $val)
しかし今、私はプロセスを逆にしたいと思っています。多くの助けをいただければ幸いです!ありがとう!
ここでは、正規表現だけでは機能しません。preg_replace_callback
ただし、代わりに次を使用できます。
$val = 'hello_world_again';
function match_toupper($m) {
return strtoupper($m[1]);
}
$val = preg_replace_callback('/(?:^|_)([a-z])/', 'match_toupper', $val);
echo $val; // HelloWorldAgain
PHP 5.3 以降では、無名関数も使用できます。
$val = 'hello_world_again';
$val = preg_replace_callback('/(?:^|_)([a-z])/',
function ($m) {
return strtoupper($m[1]);
}, $val);
echo $val; // HelloWorldAgain
e
また、修飾子に関するすべての警告と注意を無視すると、これも機能します。
$val = 'hello_world_again';
$val = preg_replace('/(?:^|_)([a-z])/e', 'strtoupper($1)', $val);
echo $val; // HelloWorldAgain
そして、正規表現を完全に回避する別のソリューションを次に示します。
$val = 'hello_world_again';
$val = implode('', array_map(ucfirst, explode('_', $val)));
echo $val; // HelloWorldAgain
PHP 5.4.32、5.5.16から使用できますstr_replace('_','',ucwords($str,'_'));
これを使用して見つけるだけで、コールバック置換を使用して $1 を上位に変換します
# (?:^|_)(.)
(?: ^ | _ )
( . ) # (1)
編集:最初の文字がアルファではない状況に遭遇した場合. 置換では、長さがある場合は $2 を大文字に変換し、次に $1 と $2 を連結
します。これにより、すべての _ が取り除かれ、句読点が残ります。
# (?i)(?:^|_)\s*([^a-z\s]*)([a-z])?
(?i)
(?: ^ | _ )
\s*
( [^a-z\s]* ) # (1)
( [a-z] )? # (2)