[英]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.