我想做这样的事情:
$string = "Lorem ipsum DOLOR Sit amet";
...some magic here... -> $finalString
$finalString = "Lorem ipsum dolor Sit amet"
基本上我不想将所有完全大写的单词转换为完整的小写单词。
答案 0 :(得分:6)
这是我最初的建议:
$finalString = preg_replace("/\\b[A-Z]+\\b/e", "strtolower(\"\\0\");", $string);
但是,从PHP 5.5.0开始,preg_replace中的e
修饰符已被弃用。所以正确的选择是preg_replace_callback:
$string = "Lorem ipsum DOLOR Sit amet";
$finalString = preg_replace_callback(
"/\\b[A-Z]+\\b/",
function($matches){
return strtolower($matches[0]);
},
$string
);
答案 1 :(得分:2)
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
答案 2 :(得分:2)
preg_replace_callback
就是您所需要的。
$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
代表字边界。
答案 3 :(得分:1)
使用preg_replace_callback()
与表达式/\b[A-Z]+\b/
(\b
- 单词的开头或结尾,[A-Z]+
- 所有字符都是大写的,并且至少有一个字符):
<?php
header('Content-Type: text/plain; charset=utf-8');
$string = 'Lorem ipsum DOLOR Sit amet';
$result = preg_replace_callback(
'/\b[A-Z]+\b/',
function($matches){
return strtolower($matches[0]);
},
$string
);
echo $result;
?>
节目:
Lorem ipsum dolor Sit amet
P.S。: 您还可以将正则表达式更新为仅小写单词,其中至少包含2个字符:
/\b[A-Z]{2,}\b/