Ответ 1
Использование регулярного выражения perl:
hello_world → HelloWorld
s/(_|\b)([a-z])/\u\2/g;
-
\b
: совпадение на границе (пробел, начало строки, знак препинания,..) -
[a-z]
: строчный алфавит -
\u
: сделать верхний регистр для следующего символа -
\2
: группа 2 (первый строчный символ) -
(_|\b)
→ группа 1 -
([a-z])
→ group2
HelloWorld → hello_world
s/([A-Z][a-z]+|[a-z]+)([A-Z])/\l\1_\l\2/g;
- Не работает для
Hello
. - Если вы можете использовать две подстановки, используйте
s/([A-Z])/_\l\1/g;
, за которым следуетs/^_//;