【问题标题】:Replace only first match using preg_replace [duplicate]使用 preg_replace 仅替换第一个匹配项 [重复]
【发布时间】:2011-10-07 11:12:09
【问题描述】:

我有一个结构类似于:'aba aaa cba sbd dga gad aaa cbz' 的字符串。由于来自外部来源,因此每次字符串可能会有所不同。

我只想替换第一次出现的'aaa' 而不是其他的。有可能吗?

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    您可以为此使用preg_replacelimit 参数并将其设置为1,以便最多发生一次替换:

    $new = preg_replace('/aaa/','replacement',$input,1);
    

    【讨论】:

      【解决方案2】:

      preg_replace可选的第四个参数是limit

      preg_replace($search, $replace, $subject, 1);
      

      【讨论】:

      • 感谢您的回答,如果我只需要从最后开始替换第一个匹配项?代码是什么?
      • @josesanchez 如果字符串不太长,您可以使用 strrev 反转它,并使用此技巧但搜索您想要查找的模式的反转,然后再次反转字符串。如果它很长,您需要反向扫描它以避免两次反转字符串的开销
      【解决方案3】:

      例如,out $content 是:

      START 
      FIRST AAA 
      SECOND AAA
      

      1) 如果你使用:

      $content = preg_replace('/START(.*)AAA/', 'REPLACED_STRING', $content);
      

      它将改变从 START 到最后一个 AAA 的所有内容,您的结果将是:

      REPLACED_STRING
      

      2) 如果你使用:

      $content = preg_replace('/START(.*?)AAA/', 'REPLACED_STRING', $content);
      

      你的结果会是这样的:

      REPLACED_STRING 
      SECOND AAA
      

      【讨论】:

      • 为什么会发生这种情况?关于“?”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2020-12-09
      • 1970-01-01
      相关资源
      最近更新 更多