首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换忽略另一个字符串中的字符串的字符串

如何替换忽略另一个字符串中的字符串的字符串
EN

Stack Overflow用户
提问于 2019-12-06 21:15:15
回答 2查看 37关注 0票数 0

这里是我问题的TLDR版本:

在字符串"q11-q2“上执行”str_replace“( "q1”、"45“、"q11-q2")而不替换"q11”的“q1”部分,有什么方法可以做到吗?

详细信息

我正在开发一个金融计算器,用户可以输入金融数据,然后我们就会说出结果。由于我不能进入的原因,我们不把公式写成代码,我们需要将公式作为字符串保存在表中。例如,表中有如下列:

代码语言:javascript
复制
     \*((q2/4)\*0.25)_49_ 
代码语言:javascript
复制
     _q10/(q2/4)_

我需要将问题1到12的答案插入公式中,其中分别写着q1、q2、...q10、q11、q12。为了做到这一点,我正在做:

代码语言:javascript
复制
$query= ///here i'd select each formula
while ($row=mysqli_fetch_array($query)):
     $formula=$row['formula']; ///would pull 
     for ($x = 1; $x <= 12; $x++) { //loop thru every answer and replace the Q version.
            $answer= $_POST['answer_'.$x]; ///answer to this question
            $formula=str_replace("q".$x, $answer, $formula);
      } //loop thru every answer and replace the Q version.
endwhile;

问题是,当我们在$x=1时,它正在替换"q10“、"q11”和"q12“中的公式中的q1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-06 21:17:51

也许使用preg_replace时有一个负的查找模式,比如q1(?!\d),意思是"q1“后面没有另一个数字字符。

代码语言:javascript
复制
preg_replace("#q1(?!\d)#","45", "q11-q2-q1-q1");
# q11-q2-45-45
票数 1
EN

Stack Overflow用户

发布于 2019-12-06 21:21:07

作为一种解决办法,您可以向后循环:

代码语言:javascript
复制
 for ($x = 12; $x > 1; $x--) { //loop thru every answer and replace the Q version.
        $answer= $_POST['answer_'.$x]; ///answer to this question
        $formula=str_replace("q".$x, $answer, $formula);
  } //loop thru every answer and replace the Q version.

这样,Q11Q1之前就被修改了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59220423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档