Split StudlyCaps string into words

时间:2013-06-04 17:05:40

标签: php regex

我需要找出一种方法,用php / regex将字符串(下面的例子)拆分成空格分隔的单词。以下是字符串和我的预期输出的一些示例:

SomeRANDOMString - >一些随机字符串
ANOTHERRandomString - >另一个随机字符串
ACRONYM - > ACRONYM
字符串 - >串

到目前为止,我目前的非工作解决方案是:

$title = preg_replace("/([a-z])([A-Z])/", "$1 $2", $title);

将上面的字符串输出为:

一些RANDOMString
ANOTHERRandom String
ACRONYM

1 个答案:

答案 0 :(得分:4)

$title = implode(' ', preg_split('/(?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z])/',
                                 $title, -1, PREG_SPLIT_NO_EMPTY)));

当前一个字符为小写且下一个字符为大写时,正则表达式的(?<=[a-z])(?=[A-Z])部分将匹配,因此这将导致在'SomeRANDOM'或{{1}等字符串的正确位置进行拆分}}。当接下来的两个字符是大写字母后跟小写字母时,'RandomString'部分将匹配,这将导致像(?=[A-Z][a-z])这样的字符串中的分割。 'ANOTHERRandom'标志阻止在字符串的最开头进行拆分,PREG_SPLIT_NO_EMPTY用于将implode()返回的数组转换为以空格分隔的字符串。