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



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

understandRegexBetter understand-regex-better

我的谷歌和对以下代码的实验并没有让我走得很远。

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

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

首选方法:

此方法将前面有小写字母的任何大写字母集替换为-和大写字母集。 然后我们在事后将整个字符串小写。

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

正则表达式回调:

使用preg_replace_callback()将任何一组大写字母替换为后跟通过strtolower()的字母-。 但是,这会在您的字符串中留下前面的-(我们可以在正则表达式中查找前面的字符,但您的第一个字母将保留为大写)。

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));

试试这个:

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

您可以使用:

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

你可以尝试这样的事情(e标志表示评估):

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

最新更新