将StudlyCaps字符串拆分为单词

3
我需要找到一种用php/regex将字符串(下面是一些示例)拆分为以空格分隔的单词的方法。以下是一些字符串示例和我的预期输出:
SomeRANDOMString -> Some RANDOM String ANOTHERRandomString -> ANOTHER Random String ACRONYM -> ACRONYM String -> String
我目前的非工作解决方案如下:
$title = preg_replace("/([a-z])([A-Z])/", "$1 $2", $title);

以下是输出的字符串:

一些随机字符串
另一个随机字符串
缩写
字符串

1个回答

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接