PHP按字符串中的模式查找字符并替换它

时间:2014-05-21 09:35:32

标签: php string preg-replace str-replace

这是一个字符串:

$str = "Discount 5.5@, Update T@";

我想将符号'@'替换为'%',但前提是它有数字(int或dec):

"Discount 5.5%, Update T@"

我用:

preg_replace("/[0-9.]*@/", "%", $str);

但它只是删除%符号之前的任何数字,我做了什么?

3 个答案:

答案 0 :(得分:2)

请参阅上面的评论。我会建议一点不同的表达方式:

preg_replace("/(\d+(?:\.\d+)?)(\s*)\@/", "$1$2%", $str);

此表达式将匹配 5 @ ,但 5.5 @ (带或不带浮点)。但是它不匹配 5。@

\d表示数字,等于[0-9]+(加)表示1或更多,但不是0次。第二个表达式以?:开头(表示不匹配为组)意味着查找。 (点)紧跟在第一个数字序列之后,后跟数字 - 整数为零或一次(不匹配 5.15.25 @ )。

然后我们检查一个空格(0次或更多次),然后在用$2替换后将它们转回来。

答案 1 :(得分:2)

$str = preg_replace('/(?<=\d)\@/', '%', $str);

答案 2 :(得分:0)

首先检查字符串是否有数字。比做一个简单的str_replace。

$str = 'Discount 5.5@, Update T@';
preg_match_all('!\d+!', $str, $matches);
if(!empty($matches)) { 
   str_replace('@','%', $str);
}