更改大小写时拆分字符串

Split string when change case

我想在改变大小写时拆分字符串。

例如我有两个字符串:ABCcdabCDE

我会在第一个上得到 ABCcd,在第二个上得到 abCDE。小写和大写的数量未定义。

我已经尝试使用 preg_matchpreg_split,但我在定义正确的正则表达式时遇到了一些问题。

也许匹配零宽度是一种选择。

正则表达式: (?<=[A-Z])(?=[a-z])|(?<=[a-z])(?=[A-Z])

Php代码:

<?php
   $str = "aaaaBddDDDeeFFggJ"; 
   $match = preg_split("/(?<=[A-Z])(?=[a-z])|(?<=[a-z])(?=[A-Z])/", $str); 

   foreach ($match as $value) {
        echo "$value \n";
    }
?>

输入字符串:

ABCcd
abCDE
aaaaBddDDDeeFFggJ

输出:

ABC
cd
ab
CDE
aaaa
B
dd
DDD
ee
FF
gg
J

Regex101 Demo

Ideone Demo

您可以尝试 php 中的 preg_match_all,这将为您提供一个包含结果的数组。

preg_match_all('([A-Z]+|[a-z]+)',"ABCdeFGhAAAss", $matches);
var_dump($matches);

示例:https://ideone.com/qITPI4

试试这个最简单的。

Try this code snippet here

<?php

ini_set('display_errors', 1);
$input = array("ABCcd","abCDE");
foreach ($input as $value)
{
    preg_match_all("#[A-Z]+|[a-z]+#", $value, $matches);
    print_r($matches[0]);

}