繁体   English   中英

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

[英]PHP find character by pattern in string and replace it

这是一个字符串:

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

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

"Discount 5.5%, Update T@"

我用:

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

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

请参阅上面的评论。 我会提出一些不同的表达:

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

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

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

然后,我们检查空格(0次或多次),然后在替换为$2后将其转回。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM