如何在字符串中所有大写字母的前面添加下划线 (_)?
PrintHello 将变为: Print_Hello
PrintHelloWorld 将变为: Print_Hello_World
可以使用negative lookahead
:
$str = 'PrintHelloWorld';
$repl = preg_replace('/(?!^)[A-Z]/', '_$0', $str);
或使用positive lookahead
:
$repl = preg_replace('/.(?=[A-Z])/', '$0_', $str);
输出:
Print_Hello_World
更新:更简单的是使用:(感谢@CasimiretHippolyte)
$repl = preg_replace('/\B[A-Z]/', '_$0', $str);
\B
不在单词边界时匹配您还需要忽略第一个大写字母,所以我输入了一个“消极的后视”来检查它是否在字符串的开头。字符串的开头由 ^ 表示。
<?php
$string = 'PrintHelloWorld';
$pattern = '/(?<!^)([A-Z])/';
$replacement = '_$1';
echo preg_replace($pattern, $replacement, $string);
?>
这是一个使用代码的链接:http: //ideone.com/HvjfWW