UPPER CASE和小写之间的单词

时间:2015-05-05 13:53:06

标签: php regex

如果有人能帮助我,那就太棒了!

我有这个:

TYLLON kevin - 转换 - >姓氏:TYLLON; prename:kevin

VAN AZERTY bert - 转换 - >姓氏:VAN AZERTY; prename:bert

YAHOO BE AWESOME rabbit - 转换 - >姓氏:YAHOO BE AWESOME; prename:rabbit

也许正则表达式,任何人?

4 个答案:

答案 0 :(得分:2)

我认为最短的答案是使用preg_split这里使用环视:

使用此正则表达式进行拆分:

/(?<=\p{Lu})\h+(?=\p{Ll})/u

匹配1个或更多水平空格,前面是大写的unicode字母,后跟小写的unicode字母。

PS:此解决方案兼容unicode。

<强>示例:

print_r(preg_split('/(?<=\p{Lu})\h+(?=\p{Ll})/u', 'YAHOO BE AWESOME rabbit'));
Array
(
    [0] => YAHOO BE AWESOME
    [1] => rabbit
)

print_r(preg_split('/(?<=\p{Lu})\h+(?=\p{Ll})/u', 'VAN AZERTY bert'));
Array
(
    [0] => VAN AZERTY
    [1] => bert
)

print_r(preg_split('/(?<=\p{Lu})\h+(?=\p{Ll})/u', 'TYLLON kevin'));
Array
(
    [0] => TYLLON
    [1] => kevin
)

答案 1 :(得分:1)

您可以使用php函数ctype_upper循环遍历您的名称字符串:

  

检查提供的字符串text中的所有字符是否都是大写字符。

首先必须explode()你的名字并将它们放在一个数组中。一旦你有一个数组,你可以检查大写/小写...

<?php
$name_array = array('VAN', 'AZERTY', 'bert');
foreach ($name_array as $testcase) {
    if (ctype_upper($testcase)) {
        echo "The string $testcase is upper case.";
    } else {
        echo "The string $testcase is lower case / mixed case.";
    }
}
?>

答案 2 :(得分:1)

尝试此解决方案。

<?php
   preg_match_all('/\b([A-Z]+)\b/', $fullname, $upper);
   preg_match_all('/\b([a-z]+)\b/', $fullname, $lower);
   $familyname = implode(' ', $upper[0]);
   $prename = implode(' ', $lower[0]);
   echo $prename.' '.$familyname;
?>

答案 3 :(得分:0)

我找到了答案,结合了多个答案:

ObjectMapper

结果:BLA BOEM BABA

preg_match_all('/\b([A-Z]+)\b/', 'BLA BOEM BABA Kevin', $matches);

结果:凯文