PHP - 单独的大写和小写字符

时间:2011-02-11 12:21:46

标签: php

我想分开大写或小写字符。

在本文中:“HELLO WORLD你好吗”

我希望第一个变量:“HELLO WORLD” 和“你好吗”在第二个。

我怎么能用PHP做到这一点?

非常感谢

5 个答案:

答案 0 :(得分: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 :(得分: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];

}

完成正则表达式

  • ^将匹配锚定到字符串的开头,以便我们测试整个字符串
  • (左括号开始一个我们稍后可以$matches[1]
  • 提取的组
  • [A-Z\s]是一个字符类,用于匹配A到Z或whitespce的字符
  • +确保有一个或多个此类字符
  • )关闭第一组
  • 然后我们在以类似方式查找小写部分之前匹配更多的空格
  • $将匹配锚定到字符串的末尾,这样我们就可以确定我们已经考虑了整个字符串

答案 2 :(得分: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 :(得分:0)

虽然regexp是确定上限或下限的最佳方法,但您也可以使用此函数来了解字符的上限或下限。如果作为参数发送的字符串包含完全上限,则此函数将返回true值

function is_upper($str)
{
$str2=strtoupper($str);
$$str="x";
if($$str==$$str2)
{

return true;

}
else
return false;
}

答案 4 :(得分: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
)