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非常感谢你。我已经更新了我的答案。谢谢。但是这个正则表达式仍然有一些错误,因为这个Aá
变成了Aá
,而不是作为Aá
谢谢。但是这个正则表达式仍然有一些错误,因为这个Aá
变成了Aá
,而不是将其保留为Aá
,与上面的答案相同。谢谢。但是这个正则表达式仍然有一些错误,因为这个Aá
变成了Aá
,而不是把它作为Aá
,和上面的答案一样。这个只对我有用,我建议修改: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;