簡體   English   中英

在大寫字母和小寫字母之間拆分單詞

[英]Split words between UPPER CASE and lower case

如果有人可以幫助我,那就太好了!

我有這個:

TYLLON kevin >姓氏: TYLLON ; 姓氏: kevin

VAN AZERTY bert -convert->姓氏: VAN AZERTY 姓氏: bert

YAHOO BE AWESOME rabbit Rabbit-convert->家族名稱: YAHOO BE AWESOME ; 姓氏: rabbit

也許正則表達式,有人嗎?

我相信最短的答案是在此處使用環顧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
)

您可以使用php函數ctype_upper遍歷您的名稱字符串:

檢查提供的字符串,文本中的所有字符是否均為大寫字符。

首先,您必須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.";
    }
}
?>

試試這個解決方案。

<?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;
?>

我找到了結合多個答案的答案:

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

結果:BLA BOEM BABA

preg_replace('/\b([A-Z]+)\b/', '', 'VAN MELKEBEKE BLA BOEM BABA Kevin');

結果:凱文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM