Preg_Replace Keep Caps

时间:2013-04-30 03:17:11

标签: php regex

基本上我只是想知道是否有一种简单的方法可以检测字符串是否为全部大写字母,然后根据大写或不大写字母替换它。

示例:

 $str = "WELL HI THERE BOB!";
 $str = preg_replace("hi", "greetings", $str);

那会出现“向BOB打招呼”,但我希望它出来“BOB WELL GREETINGS”。

我想要:

 $str = "Well hi there bob";
 $str = preg_replace("hi", "greetings", $str);

出来:“那里的问候很棒!”

所以,再一次,我希望它能保持全部上限,但前提是它已经全部被限制。

3 个答案:

答案 0 :(得分:3)

不幸的是,只有正则表达式搜索/替换你才能做到这一点。如果您只需要担心单词可以使用:

str_replace(array("hi", "HI"), array("goodbye", "GOODBYE"), $str);

根据您的确切需求,您可以使用preg_replace_callback,这样您就可以获得完全匹配并检查匹配值的单个字母的大小写,并根据该字母返回替换。

答案 1 :(得分:2)

您可以使用ctype_upper()函数来确定字符串是否全部为大写:

$str = "WELL HI THERE BOB!";
$replace = "greetings";

$replace = ctype_upper($str) ? strtoupper($str) : strtolower($replace);
$str = str_replace("hi", $replace, $str);

我使用ternary operator来测试$str是否为大写。如果是这样,$replace将转换为大写。如果没有,它会转换为小写。

输出

  

$str = "WELL GREETINGS THERE BOB!";

答案 2 :(得分:0)

试试这个:

<?php $str = "WELL HI THERE BOB!";  
 $str = str_replace('hi', 'greetings', $str);
 $str = str_replace('HI', 'GREETINGS', $str);
    if (!(strtoupper($str) == $str)) {      
    $str = ucfirst(strtolower($str)); 
  } else{
    $str = strtoupper($str);      
  }
 echo $str; 
 ?>

<强>输出:

输入时为:$str = "WELL HI THERE BOB!"

WELL GREETINGS THERE BOB!

当输入为$str = "WELL hi THERE BOB!";

Well greetings there bob!