我需要找出一种方法,用php / regex将字符串(下面的例子)拆分成空格分隔的单词。以下是字符串和我的预期输出的一些示例:
SomeRANDOMString - >一些随机字符串
ANOTHERRandomString - >另一个随机字符串
ACRONYM - > ACRONYM
字符串 - >串
到目前为止,我目前的非工作解决方案是:
$title = preg_replace("/([a-z])([A-Z])/", "$1 $2", $title);
将上面的字符串输出为:
一些RANDOMString
ANOTHERRandom String
ACRONYM
串
答案 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()
返回的数组转换为以空格分隔的字符串。