我该如何拆分这个词:
oneTwoThreeFour
放到一个数组中,这样我就可以得到:
one Two Three Four
和preg_match
?
我对此感到厌倦,但它只是给出了整个单词
$words = preg_match("/[a-zA-Z]*(?:[a-z][a-zA-Z]*[A-Z]|[A-Z][a-zA-Z]*[a-z])[a-zA-Z]*\b/", $string, $matches)`;
发布于 2010-12-23 22:52:46
您还可以将preg_match_all
用作:
preg_match_all('/((?:^|[A-Z])[a-z]+)/',$str,$matches);
解释:
( - Start of capturing parenthesis.
(?: - Start of non-capturing parenthesis.
^ - Start anchor.
| - Alternation.
[A-Z] - Any one capital letter.
) - End of non-capturing parenthesis.
[a-z]+ - one ore more lowercase letter.
) - End of capturing parenthesis.
发布于 2014-04-12 17:08:28
虽然ridgerunner的答案很好用,但它似乎不适用于出现在句子中间的全大写的子串。我使用下面的代码,它似乎可以很好地处理这些问题:
function splitCamelCase($input)
{
return preg_split(
'/(^[^A-Z]+|[A-Z][^A-Z]+)/',
$input,
-1, /* no limit for replacement count */
PREG_SPLIT_NO_EMPTY /*don't return empty elements*/
| PREG_SPLIT_DELIM_CAPTURE /*don't strip anything from output array*/
);
}
一些测试用例:
assert(splitCamelCase('lowHigh') == ['low', 'High']);
assert(splitCamelCase('WarriorPrincess') == ['Warrior', 'Princess']);
assert(splitCamelCase('SupportSEELE') == ['Support', 'SEELE']);
assert(splitCamelCase('LaunchFLEIAModule') == ['Launch', 'FLEIA', 'Module']);
assert(splitCamelCase('anotherNASATrip') == ['another', 'NASA', 'Trip']);
发布于 2013-06-15 17:38:30
@ridgerunner答案的函数化版本。
/**
* Converts camelCase string to have spaces between each.
* @param $camelCaseString
* @return string
*/
function fromCamelCase($camelCaseString) {
$re = '/(?<=[a-z])(?=[A-Z])/x';
$a = preg_split($re, $camelCaseString);
return join($a, " " );
}
https://stackoverflow.com/questions/4519739
复制相似问题