[英]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.