2

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

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

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

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

它将上面的字符串输出为:

Some RANDOMString
ANOTHERRandom String
ARONYM
String

4

1 回答 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'or之类的字符串'RandomString'。当接下来的两个字符是一个大写字母后跟一个小写字母时,该(?=[A-Z][a-z])部分将匹配,这将导致像'ANOTHERRandom'. 该PREG_SPLIT_NO_EMPTY标志防止在字符串的最开头进行拆分,并implode()用于将返回的数组转换为preg_split()以空格分隔的字符串。

于 2013-06-04T17:13:12.573 回答