Как заменить все заглавные буквы тире и строчным эквивалентом в 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");