正则表达式分解camelCase字符串PHP

时间:2011-07-04 14:45:14

标签: php regex string

假设我有以下字符串:

getPasswordLastChangedDatetime

我怎么能用大写字母拆分它以便我能够得到:

get
Password
Last
Changed
Datetime

7 个答案:

答案 0 :(得分:6)

如果你只关心ASCII字符:

$parts = preg_split("/(?=[A-Z])/", $str);

DEMO

(?= ..)构造称为lookahead [docs]

如果部件在开头只包含大写字符,则此方法有效。如果你有像getHTMLString这样的东西会变得更复杂。这可以匹配:

$parts = preg_split("/((?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z]))/", $str);

DEMO

答案 1 :(得分:1)

过早地问这个问题,发现了这个:

preg_replace('/(?!^)[[:upper:]]/',' \0',$test);

答案 2 :(得分:1)

例如:

(?:^|\p{Lu})\P{Lu}*

答案 3 :(得分:0)

无需过度复杂的解决方案。这样做

preg_replace('/([A-Z])/',"\n".'$1',$string);

这当然不会照顾缩略语

答案 4 :(得分:0)

preg_split('@(?=[A-Z])@', 'asAs')

答案 5 :(得分:0)

使用此:[a-z]+|[A-Z][a-z]*\p{Ll}+|\p{Lu}\p{Ll}*

答案 6 :(得分:0)

 preg_split("/(?<=[a-z])(?=[A-Z])/",$password));