如何用PHP中的破折号和小写等效替换所有大写字母?
如understandRegexBetter要understand-regex-better?
我的Google-fu和以下代码的实验并没有让我走得太远.
echo preg_replace('/[A-Z]+/', "-$'", "understandRegexBetter");
Run Code Online (Sandbox Code Playgroud)
编辑:我忘了明确说明第一个字符永远不会是大写的.
你可以这样做:
echo strtolower(preg_replace('~(?=[A-Z])(?!\A)~', '-', $str));
Run Code Online (Sandbox Code Playgroud)
首选方法:
此方法替换任何一组以大写字母开头的大写字母和一-组大写字母.然后我们在事实之后小写整个字符串.
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)