Как заменить все прописные буквы тире и строчными буквами регулярным выражением?

Как заменить все заглавные буквы тире и строчным эквивалентом в php?

Такие, как understandRegexBetter чтобы understand-regex-better ?

Мой Google-фу и эксперименты со следующим кодом не заставили меня очень далеко.

 echo preg_replace('/[AZ]+/', "-$'", "understandRegexBetter"); 

Редактировать: я забыл указать, что первый символ никогда не заглавными.

попробуй это:

 echo strtolower(preg_replace('/([AZ]+)/', "-$1", "understandRegexBetter")); 

Предпочтительный метод:

Этот метод заменяет любой набор заглавных букв, которым предшествует строчная буква с символом « - и набором заглавных букв. Затем мы передаем всю строку после факта.

 echo strtolower(preg_replace( '/(?<=[az])([AZ]+)/', '-$1', 'understandRegexBetter' )); 

Обратный звонок RegEx:

Использует preg_replace_callback() чтобы заменить любой набор заглавных букв strtolower() a, а затем буквы, переданные через strtolower() . Это, однако, оставит предыдущее - в вашей строке (мы могли бы искать предыдущие символы в RegEx, но тогда ваше первое письмо оставалось бы в верхнем регистре).

 echo preg_replace_callback( '/[AZ]+/', function ($matches) { $character = reset($matches); return '-' . strtolower($character); }, 'understandRegexBetter' ); 

Запрещены:

Обратите внимание, что вы можете технически использовать preg_replace() с помощью модификатора e , но он устарел с PHP 5.5. Примером может служить:

 echo preg_replace( '/([AZ]+)/e', '"-" . strtolower("$1")', 'understandRegexBetter' ); 

Вы можете сделать это:

 echo strtolower(preg_replace('~(?=[AZ])(?!\A)~', '-', $str)); 

Вы можете использовать:

 $s = 'understandRegexBetter'; $r = preg_replace_callback('~(?<=[az])([AZ])~', function ($m) { return '-' . strtolower($m[1]); }, $s); echo $r; 

Вы можете попробовать что-то вроде этого (e flag означает оценку):

 echo preg_replace('/([AZ])/e', "strtolower('-\\1')", "understandRegexBetter");