4

如何在字符串中所有大写字母的前面添加下划线 (_)?

PrintHello 将变为: Print_Hello

PrintHelloWorld 将变为: Print_Hello_World

4

2 回答 2

5

可以使用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不在单词边界时匹配
于 2013-10-27T16:54:42.930 回答
1

您还需要忽略第一个大写字母,所以我输入了一个“消极的后视”来检查它是否在字符串的开头。字符串的开头由 ^ 表示。

<?php
$string = 'PrintHelloWorld';
$pattern = '/(?<!^)([A-Z])/';
$replacement = '_$1';
echo preg_replace($pattern, $replacement, $string);
?>

这是一个使用代码的链接:http: //ideone.com/HvjfWW

于 2013-10-27T16:58:30.590 回答