Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将所有完整的大写单词转换为小写_Php_String - Fatal编程技术网

PHP将所有完整的大写单词转换为小写

PHP将所有完整的大写单词转换为小写,php,string,Php,String,我想这样做: $string = "Lorem ipsum DOLOR Sit amet"; ...some magic here... -> $finalString $finalString = "Lorem ipsum dolor Sit amet" 基本上我不想把所有大写的单词都转换成小写 这是我最初的建议: $finalString = preg_replace("/\\b[A-Z]+\\b/e", "strtolower(\"\\0\");", $string); 但是,自

我想这样做:

$string = "Lorem ipsum DOLOR Sit amet";
...some magic here... -> $finalString
$finalString = "Lorem ipsum dolor Sit amet"

基本上我不想把所有大写的单词都转换成小写

这是我最初的建议:

$finalString = preg_replace("/\\b[A-Z]+\\b/e", "strtolower(\"\\0\");", $string);
但是,自PHP5.5.0以后,中的
e
修饰符就不受欢迎了。因此,正确的选择是:


一个sans regex解决方案

<?php
$string = "Lorem ipsum DOLOR Sit amet";
$str_arr = explode(' ',$string);
foreach($str_arr as &$val)
{
if($val==strtoupper($val))
{
$val=strtolower($val);
}
}
echo $str= implode(' ',$str_arr); //"prints" Lorem ipsum dolor Sit amet
与表达式一起使用
/\b[A-Z]+\b/
\b
-单词的开头或结尾,
[A-Z]+
-所有字符都是大写的,并且至少有一个字符):

p.S.:您还可以将正则表达式更新为仅限小写的单词,其中至少有2个字符:

/\b[A-Z]{2,}\b/
这就是你需要的

$string = "Lorem ipsum DOLOR Sit amet";

$finalString = preg_replace_callback('/\b([A-Z]+)\b/', function($m) {
        return strtolower($m[1]);
}, $string);

echo $finalString;

$m[1]
匹配匹配大写单词的第一个捕获组
([A-Z]+)
<代码>\b
表示单词边界。

您对此进行了一些研究吗?可以通过分解空白,然后检查每个元素或(我更喜欢)正则表达式来完成。自己尝试一下,然后详细说明失败的地方以及为什么不能自己完成这项工作
e
修饰符已被删除,否?preg\u replace\u callback()可能更好approach@HAL9000非常感谢你。我已经更新了我的答案。@MarkBaker非常感谢你。我已经更新了我的答案。谢谢。但是这个正则表达式仍然有一些错误,因为这个
变成了
,而不是作为
谢谢。但是这个正则表达式仍然有一些错误,因为这个
变成了
,而不是将其保留为
,与上面的答案相同。谢谢。但是这个正则表达式仍然有一些错误,因为这个
变成了
,而不是把它作为
,和上面的答案一样。这个只对我有用,我建议修改:
strtoupper($s)
->
mb_strtoupper($s,'utf-8')
。与strtolower相同
Lorem ipsum dolor Sit amet
/\b[A-Z]{2,}\b/
$string = "Lorem ipsum DOLOR Sit amet";

$finalString = preg_replace_callback('/\b([A-Z]+)\b/', function($m) {
        return strtolower($m[1]);
}, $string);

echo $finalString;