繁体   English   中英

如何将所有大写字母替换为破折号,并将小写替换为正则表达式?

[英]How do I replace all uppercase letters with a dash and lowercase with regex?

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

understandRegexBetter understand-regex-betterunderstand-regex-better

我的Google-fu和对以下代码的尝试还不算很远。

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

编辑:我忘了具体说明第一个字符从不大写。

首选方法:

此方法用-和大写字母集替换任何以小写字母开头的大写字母集。 然后,将事实之后的整个字符串都小写。

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

RegEx回调:

使用preg_replace_callback()将任何大写字母替换为-然后通过strtolower()传递字母。 但是,这将在字符串中保留一个前缀- (我们可以在RegEx中查找前缀字符,但是您的第一个字母将大写)。

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

不推荐使用:

旁注,您可以在技术上将preg_replace()e修饰符一起使用,但自PHP 5.5起不推荐使用。 一个例子是:

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

你可以这样做:

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

您可以使用:

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

尝试这个:

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

您可以尝试执行以下操作(e标志表示评估):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM