如何用正则表达式用短划线和小写替换所有大写字母?

Isi*_*ius 1 php regex

如何用PHP中的破折号和小写等效替换所有大写字母?

understandRegexBetterunderstand-regex-better

我的Google-fu和以下代码的实验并没有让我走得太远.

echo preg_replace('/[A-Z]+/', "-$'", "understandRegexBetter");
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了明确说明第一个字符永远不会是大写的.

Cas*_*yte 6

你可以这样做:

echo strtolower(preg_replace('~(?=[A-Z])(?!\A)~', '-', $str));
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 6

首选方法:

此方法替换任何一组以大写字母开头的大写字母和一-组大写字母.然后我们在事实之后小写整个字符串.

echo strtolower(preg_replace(
    '/(?<=[a-z])([A-Z]+)/',
    '-$1',
    'understandRegexBetter'
));
Run Code Online (Sandbox Code Playgroud)

RegEx回调:

用于preg_replace_callback()替换任何一组大写字母,-后跟通过的字母strtolower().但是,这将-在您的字符串中留下一个前缀(我们可以在RegEx中查找前面的字符,但随后您的第一个字母将保留为大写).

echo preg_replace_callback(
    '/[A-Z]+/',
    function ($matches) {
        $character = reset($matches);
        return '-' . strtolower($character);
    },
    'understandRegexBetter'
);
Run Code Online (Sandbox Code Playgroud)

推荐使用:

侧面说明,技术上可以使用preg_replace()e修改,但它已被弃用的PHP 5.5的.一个例子是:

echo preg_replace(
    '/([A-Z]+)/e',
    '"-" . strtolower("$1")',
    'understandRegexBetter'
);
Run Code Online (Sandbox Code Playgroud)