在PHP中按大写字母拆分字符串?

12
我发现了一个类似的问题,但它并没有回答我的问题,按大写字母分割单词
我有一个字符串是驼峰命名法。我想要在每个大写字母处分隔该字符串,如下所示。
$str = 'CamelCase'; // array('Camel', 'Case');

我已经做到了这一步:
$parts = preg_split('/(?=[A-Z])/', 'CamelCase');

但是生成的数组总是以一个空值开头!$parts 的样子是这样的:
$parts = array('', 'Camel', 'Case');

如何在数组开头去掉空值?

3个回答

22
您可以像这样使用PREG_SPLIT_NO_EMPTY标志:
$parts = preg_split('/(?=[A-Z])/', 'CamelCase', -1, PREG_SPLIT_NO_EMPTY);

请参阅preg_split文档


3
你需要使用正向回顾。试试这个:
```(?<=pattern)```
$parts = preg_split('/(?<=\\w)(?=[A-Z])/', 'CamelCase')

array(2) {
  [0]=>
  string(5) "Camel"
  [1]=>
  string(4) "Case"
}

似乎无法处理 C CamelCase,如果有空格可能需要进行调整。 - Wesley Murch
@Wesley,空格不是原始要求中的一部分,但这个可以工作:preg_split('/(?:(?<=\w)(?=[A-Z])| )/', 'C CamelCase')。 - Will

2

数组过滤器可用于删除所有空值:

$parts = array_filter( $parts, 'strlen' );

1
他想要生成正确的数组,而不是修复损坏的。 - Will
1
鉴于Kara的回答,这不是最好的答案,但是为了辩护,提问者特别询问“如何摆脱数组开头的空值?” - Jim

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