首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用php preg_match (正则表达式)将camelCase word拆分成单词

使用php preg_match (正则表达式)将camelCase word拆分成单词
EN

Stack Overflow用户
提问于 2010-12-23 22:44:12
回答 9查看 39.5K关注 0票数 74

我该如何拆分这个词:

代码语言:javascript
复制
oneTwoThreeFour

放到一个数组中,这样我就可以得到:

代码语言:javascript
复制
one Two Three Four

preg_match

我对此感到厌倦,但它只是给出了整个单词

代码语言:javascript
复制
$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)`;
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-12-23 22:52:46

您还可以将preg_match_all用作:

代码语言:javascript
复制
preg_match_all('/((?:^|[A-Z])[a-z]+)/',$str,$matches);

解释:

代码语言:javascript
复制
(        - 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.
票数 83
EN

Stack Overflow用户

发布于 2014-04-12 17:08:28

虽然ridgerunner的答案很好用,但它似乎不适用于出现在句子中间的全大写的子串。我使用下面的代码,它似乎可以很好地处理这些问题:

代码语言:javascript
复制
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*/
    );
}

一些测试用例:

代码语言:javascript
复制
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']);
票数 15
EN

Stack Overflow用户

发布于 2013-06-15 17:38:30

@ridgerunner答案的函数化版本。

代码语言:javascript
复制
/**
 * 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, " " );
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4519739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档