PHP-替换字符串的一部分

PHP-替换字符串的一部分,php,regex,replace,Php,Regex,Replace,这是我的密码 $Find = array('hardwareSet[articles][(.*)]'); $Replace = array('hardwareSetRAM'); $RAMBOX = str_replace($Find, $Replace, $RAMBOX); 全文如下:hardwareseet[articles][RANDOMnumberHERE] 第二个[]总是有不同的数字。我想将hardwareseet[articles][whatevernumberisere]更改

这是我的密码

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

$RAMBOX = str_replace($Find, $Replace, $RAMBOX);
全文如下:
hardwareseet[articles][RANDOMnumberHERE]

第二个
[]
总是有不同的数字。我想将
hardwareseet[articles][whatevernumberisere]
更改为类似
hardwareSetRAM
的字符串


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

既然您使用的是RegExp,请使用
preg\u replace

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

使用正则表达式<代码>str_replace将只替换静态值

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

硬件有轨电车

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

Regex101演示:


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

您的问题很奇怪

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

$str = 'hardwareSet[articles][' . $newValue . ']';
但如果您不知道字符串中的任何部分,可以使用以下代码:

<?php

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

$RAMBOX = preg_replace('~^(.+)\[(.+)\]\[(.+)\]$~', '$1[$2][' . $Replace . ']', $Find);

var_dump($RAMBOX);
试试这个

    $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);
    }

我有一种感觉,不知怎的,你在迂回地要求某人指出,还有另一个替换函数
preg_replace
,它“执行正则表达式搜索和替换”,这显然是你想要的。愚蠢的问题,但当有4个答案时,这“不清楚你在问什么”是怎么回事?显然,有些人很清楚这一点。我投票决定重新开放。@Mike,我想问题是这个问题基本上是“你能修好我的代码吗?”,这不是一个有用的问题。@Ian如果是这样的话,他们应该投票决定“太宽了”。它怎么不起作用?