在大写字母之前添加下划线

时间:2013-10-27 16:51:09

标签: php regex match

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

PrintHello将成为:Print_Hello

PrintHelloWorld将成为:Print_Hello_World

2 个答案:

答案 0 :(得分: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匹配时不在单词边界

答案 1 :(得分:1)

你还要求忽略第一个大写字母,所以我放入一个“负面的后视”来检查它是否在字符串的开头。字符串的开头由^。

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

以下是使用代码的链接:http://ideone.com/HvjfWW