PHP - 替换字符串的一部分

时间:2015-11-12 21:33:02

标签: php regex replace

这是我的代码!

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

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

整篇文章如下:hardwareSet[articles][RANDOMnumberHERE]

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

我怎么能这样做,你能帮助我吗?

4 个答案:

答案 0 :(得分:1)

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

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

输出:

  

hardwareSetRAM

/delimiters\正在逃避[]\d是一个数字。 +表示一个或多个数字。

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

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

答案 1 :(得分:0)

由于您使用的是RegExp,请使用preg_replace

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

答案 2 :(得分:0)

你的问题很奇怪。

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

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

但如果您不知道字符串中的任何部分,则可以使用以下代码:

<?php

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

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

var_dump($RAMBOX);

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

答案 3 :(得分:0)

试试这个

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