如何在字符串中添加所有大写字母的下划线(_)?
PrintHello将成为:Print_Hello
PrintHelloWorld将成为:Print_Hello_World
答案 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