如何将字符串中#后跟整数的组合替换为FALSE?
解决PHP中替换#加整数为FALSE的问题
你的问题出在str_replace只替换了#符号本身,却没把后面跟着的整数一起替换掉,所以才会出现FALSE1这种不符合预期的结果。要处理可变长度的整数,咱们得用正则表达式匹配来搞定。
修改后的代码方案
直接用preg_replace来匹配#后面的一个或多个数字,然后整体替换成FALSE:
$newlogicexpression = '#1 and (1743327.12 > 10)'; // 匹配#后跟任意数量的数字,替换为FALSE $newlogicexpression = preg_replace('/#\d+/', 'FALSE', $newlogicexpression); $this->logger->debug($newlogicexpression);
为什么这么做?
- 正则表达式
/#\d+/的含义:#:匹配字面量的#符号\d+:匹配一个或多个数字(\d代表数字,+表示至少出现一次)
- 这样不管#后面是1位还是多位整数(比如#123、#4567),都会被完整替换成
FALSE,不会留下多余的数字。
可选优化:保留存在性判断(如果需要)
如果你还是想先判断字符串里有没有#开头的数字组合再执行替换,可以这么写:
$newlogicexpression = '#1 and (1743327.12 > 10)'; if (preg_match('/#\d+/', $newlogicexpression)) { $newlogicexpression = preg_replace('/#\d+/', 'FALSE', $newlogicexpression); $this->logger->debug($newlogicexpression); }
这样处理后,你的预期结果FALSE and (1743327.12 > 10)就能正常输出啦!
内容的提问来源于stack exchange,提问作者Shiromi
相关产品推荐
相关产品推荐

