Помогите с регуляркой

hell0w0rd

Продвинутый новичок
Нужно разбить строку в CamelCase.
То есть OneTwoClass -> One, Two, Class
Такое наверняка есть внутри того же композера, наверняка кто-то знает.
В итоге нужно преобразовать в psr-0:
One\Two\Class\OneTwoClass
 

WMix

герр M:)ller
Партнер клуба
сдается мне что правильно использовать подчеркивание (URLParser => U\R\L\Parser\URLParser)
но как решение такую штуку повторить N раз, в зависимости от макс. колличества горбов
Код:
([A-Z][a-z\d]+)
PHP:
preg_match_all("/([A-Z][a-z\d]+)([A-Z][a-z\d]+)([A-Z][a-z\d]+)/","OneTwoClass", $out);
print_r($out);
 

hell0w0rd

Продвинутый новичок
сдается мне что правильно использовать подчеркивание (URLParser => U\R\L\Parser\URLParser)
но как решение такую штуку повторить N раз, в зависимости от макс. колличества горбов
Код:
([A-Z][a-z\d]+)
PHP:
preg_match_all("/([A-Z][a-z\d]+)([A-Z][a-z\d]+)([A-Z][a-z\d]+)/","OneTwoClass", $out);
print_r($out);
Как-то замороченно. У меня есть такое решение, но оно режет заглавные буквы, а не только по ним разбивает:
PHP:
$extension = preg_split('([A-Z])', $extension);
$extension = implode('\\', $extension);
C подчеркиванием было-бы проще, да, но не так красиво)
 

WMix

герр M:)ller
Партнер клуба
ура получилось ))
PHP:
preg_match_all("/(?<![A-Z])[A-Z\d]+(?![a-z\d])|[A-Z][a-z\d]+/","URLParserSTDClass", $out);
print_r($out);
Код:
Array
(
    [0] => Array
        (
            [0] => URL
            [1] => Parser
            [2] => STD
            [3] => Class
        )

)
 
Сверху