PHP如何按大写字母分割字符串?

49

我有类似这样的字符串:

$a = 'helloMister';
$b = 'doggyWaltz';
$c = 'bumWipe';
$d = 'pinkNips';

我如何将字符串按大写字母拆分?我已在Google上搜索了一段时间,但没有找到任何有用的信息!

5个回答

120

如果你想将helloMister拆分成helloMister,可以使用preg_split在大写字母前面的位置使用正向先行断言来拆分字符串:

$pieces = preg_split('/(?=[A-Z])/',$str);

如果你想把它分割成helloister,可以这样做:

$pieces = preg_split('/[A-Z]/',$str);

10
如果第一个字符已经是大写,这个正则表达式会生成一个空元素,如果你想省略它,可以使用lcfirst函数:$pieces = preg_split('/.(?=[A-Z])/', lcfirst($str));该函数将字符串$str转换为小写,并将其作为输入传递给preg_split函数,以便在大写字母前拆分字符串,得到一个数组$pieces。 - zeldi
如果第一个字符是小写字母,则这个工作正常,但假设我们需要分解“RecipesActionModel”,并且我们只想要三个元素的数组“Receipe、Action、Model”。这个解决方案会创建一个有四个元素的数组,其中元素0为空。 - SaidbakR
非常感谢您,我正在研究正向先行断言,您的答案对我帮助很大! - Worldgorger
1
使用 array_filter 将其包装起来以去除任何空元素。 - Matt
8
使用此方法来避免第一个元素为空的情况,如果第一个元素为大写字母。 preg_split('/(?=[A-Z])/', 'CamelCase', -1, PREG_SPLIT_NO_EMPTY); - Alyas

10

查找preg_split

$result = preg_replace("([A-Z])", " $0", "helloMister");
print_r(explode(' ', $result));

hacky hack. 只要不在输入字符串中放置空格即可。


0

关于所选答案的进一步说明。

如果您在文本中处理缩写词,它将把OOP更改为O O P

然后,您可以使用preg_split('/(?=[A-Z][a-z])/', $text)向前查找小写字母,以完全捕获单词。


0

扩展Mathew的答案,这个完美地运作了,

$arr = preg_replace("([A-Z])", " $0", $str);
$arr = explode(" ",trim($arr));

-1

看看preg_split,它类似于explode但接受正则表达式

preg_split('~[A-Z]~',$inputString)

我也是这么想的,我认为他们也希望第二个单词的首字母大写。 - Matthew
这很酷,它输出一个数组吗? - cgwebprojects

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