2011-02-11 52 views
0

我想分隔大寫或小寫字符。PHP - 單獨的大寫和小寫字符

在這樣的文字:「HELLO WORLD你好嗎」

我想在第一個變量:「HELLO WORLD」 和「你怎麼樣」中的第二位。

我該怎麼用ph​​p做到這一點?

非常感謝

+0

後你有這麼遠的代碼? – 2011-02-11 12:22:24

+3

這是什麼邏輯。能有像「Hello WORLD」這樣的輸入嗎?你想怎麼處理? 「HEllO WoRLD」怎麼樣? – 2011-02-11 12:22:41

回答

1

只需使用一個不同的,非正則表達式的方法

$original = "HELLO WORLD how are you"; 

$upper = trim(implode(array_intersect(str_split($original),str_split(strtoupper($original))))); 
$lower = trim(implode(array_intersect(str_split($original),str_split(strtolower($original))))); 

echo $upper,'<br />'; 
echo $lower,'<br />'; 
3

這是假設字符串的第一部分是大寫和其餘的是正常的(例如混合的情況下)。就像你發佈的例子一樣。

preg_match('/^([A-Z\s]+)(.*)$/', $string, $match); 
$first_part = trim($match[1]); 
$second_part = trim($match[2]); 

如果大寫和混合大小寫單詞在句子中混合,然後我會做這樣(注意,這個替換單個空格詞與詞之間的一切)。

$words = preg_split('/[^\w]+/', $string); 
$upper = ''; 
$lower = ''; 

foreach ($words as $word) { 
    if ($word == strtoupper($word)) { 
     $upper .= ' ' . $word; 
    } else { 
     $lower .= ' ' . $word; 
    } 
} 
1

如果你輸入的字符串始終是一個UPPER CASE SEQUENCE後跟一個lower case sequence,這樣的事情可能會做它

if (preg_match('/^([A-Z\s]+)\s+([a-z\s+])$/', $str, $matches)) 
{ 
    $upper=$matches[1]; 
    $lower=$matches[2]; 

} 

要通過正則表達式

  • ^錨比賽中行走字符串的開始,以便我們測試整個字符串
  • ( openi納克括號開始一個組中,我們可以提取以後作爲$matches[1]
  • [A-Z\s]是字符類匹配字符它們是從A到Z或whitespce
  • +可以確保有一個或多個這種字符
  • )關閉第一組
  • 那麼我們就以類似的方式
  • $錨比賽尋找下外殼部到字符串結束前匹配多一點空白,讓我們可以肯定我們已經考慮整個字符串
0

雖然正則表達式是最好的方法確定上限或下限,也可以使用此功能,瞭解有無上限或字符的下部。如果被髮送的參數字符串包括完全上,這個函數將返回真值

0

我知道這是有點晚了,但我碰到這個問題絆倒在尋找別的東西。無論如何,preg_split適用於這種情況:

$original = "HELLO WORLD how are you"; 

$split = preg_split(
    '/([[:lower:]].*)/', 
    $original, 
    0, 
    PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY 
); 

print_r($split); 

輸出:

Array 
(
    [0] => HELLO WORLD 
    [1] => how are you 
)