2011-02-11 43 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 
)