我想分开大写或小写字符。
在本文中:“HELLO WORLD你好吗”
我希望第一个变量:“HELLO WORLD” 和“你好吗”在第二个。
我怎么能用PHP做到这一点?
非常感谢
答案 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
)