正则表达式在大写字母前面强调

时间:2014-08-22 11:40:44

标签: php regex string

我创建了这个正则表达式,它将在所有大写字母的前面添加一个下划线,除了第一个大写字母,如果它在字符串的开头

$string = preg_replace('/(?!^)[A-Z]/', '_$0', $string);
// Hello --> Hello
// HelloHello --> Hello_Hello
// aHelloHello --> a_Hello_Hello
// HELLO --> H_E_L_L_O
// hello --> hello
// HHEllo --> H_Hello

我希望正则表达式跳过字符串开头的所有连续大写字符:

// HHello --> HHello
// HEllO --> HEll_O
// aHEllo --> a_H_Ello
// HHHHHHHHHHellO --> HHHHHHHHHHell_O

简而言之:一个正则表达式,它在所有大写字母的前面添加一个下划线但忽略了字符串开头的所有连续大写字母。

3 个答案:

答案 0 :(得分:1)

正则表达式:

^[A-Z]+(*SKIP)(*F)|[A-Z]

替换字符串:

_$0

DEMO

如果你想在python中做同样的事情,那么你需要使用regex模块,它允许量词在后面看,

>>> import regex
>>> m = regex.sub(r'(?<!^[A-Z]+|^)([A-Z])', r'_\1', 'HHHHHHHHHHHHHeLLO')
>>> m
'HHHHHHHHHHHHHe_L_L_O'

答案 1 :(得分:0)

我不确定我完全理解这个问题,但是如何:

$string = preg_replace('/([a-z])([A-Z])/', '$1_$2', $string);

答案 2 :(得分:0)

我认为这就是你想做的事情:

$string = preg_replace('/(?<=[a-z])[A-Z]/', '_$0', $string);