【问题标题】:PHP - Replace part of a string [closed]PHP - 替换字符串的一部分[关闭]
【发布时间】:2016-02-14 09:20:59
【问题描述】:

这是我的代码!

$Find = array('hardwareSet[articles][(.*)]');
$Replace   = array('hardwareSetRAM');

$RAMBOX = str_replace($Find, $Replace, $RAMBOX);

全文是这样的:hardwareSet[articles][RANDOMnumberHERE]

第二个[] 总是有不同的数字。我希望将hardwareSet[articles][WhatEverNumberIsHere] 更改为类似于hardwareSetRAM 的字符串。

我该怎么做,你能帮帮我吗?

【问题讨论】:

  • 我感觉你以一种迂回的方式询问某人指出还有另一个替换函数preg_replace“执行[s]正则表达式搜索和替换”这是什么你显然想要。
  • 愚蠢的问题,但是当有 4 个答案时,这个“不清楚你在问什么”是怎么回事?显然,有些人很清楚。我正在投票重新开放。
  • @Mike,我认为问题在于问题基本上是“你能修复我的代码吗?”,这不是一个有用的问题。
  • @Ian 在这种情况下,他们应该投票“太宽泛”。

标签: php regex replace


【解决方案1】:

由于您使用的是正则表达式,请使用preg_replace

preg_replace('/hardwareSet\[articles\]\[.*\]/', 'hardwareSet[articles][hardwareSetRAM]', $string);

【讨论】:

    【解决方案2】:

    使用正则表达式。 str_replace 只会替换静态值。

    $RAMBOX = 'hardwareSet[articles][123]';
    $Find = '/hardwareSet\[articles\]\[\d+\]/';
    $Replace   = 'hardwareSetRAM';
    $RAMBOX = preg_replace($Find, $Replace, $RAMBOX);
    

    输出:

    硬件设置RAM

    /s 是delimiters\s 正在转义 []s。 \d 是一个数字。 + 表示一个或多个数字。

    Regex101 演示:https://regex101.com/r/jS6nO9/1

    如果您想捕获号码,请将\d+ 放入捕获组()。这将在替换值中引用为$1

    【讨论】:

    【解决方案3】:

    你的问题很奇怪。

    如果知道字符串的开头,则只能生成新字符串:

    $str = 'hardwareSet[articles][' . $newValue . ']';
    

    但是如果你不知道字符串中的任何部分,你可以使用这个代码:

    <?php
    
    $Find = array('hardwareSet[articles][(.*)]');
    $Replace   = 'hardwareSetRAM';
    
    $RAMBOX = preg_replace('~^(.+)\[(.+)\]\[(.+)\]$~', '$1[$2][' . $Replace . ']', $Find);
    
    var_dump($RAMBOX);
    

    在此代码中,不测量字符串中的任何部分

    【讨论】:

      【解决方案4】:

      试试这个

          $t ='hardwareSet[articles][RANDOMnumberHERE]';
          echo replace_between($t, 'hardwareSet[articles][', ']', 'hardwareSetRAM');
      
          function replace_between($str, $needle_start, $needle_end, $replacement) {
              $pos = strpos($str, $needle_start);
              $start = $pos === false ? 0 : $pos + strlen($needle_start);
      
              $pos = strpos($str, $needle_end, $start);
              $end = $pos === false ? strlen($str) : $pos;
      
              return substr_replace($str, $replacement, $start, $end - $start);
          }
      

      【讨论】:

        猜你喜欢
        • 2018-09-20
        • 2013-06-19
        • 1970-01-01
        • 2022-07-18
        • 2014-03-06
        • 2015-04-06
        • 2013-10-27
        • 2012-05-18
        • 2017-09-19
        相关资源
        最近更新 更多