这是我的代码!
$Find = array('hardwareSet[articles][(.*)]');
$Replace = array('hardwareSetRAM');
$RAMBOX = str_replace($Find, $Replace, $RAMBOX);
整篇文章如下:hardwareSet[articles][RANDOMnumberHERE]
第二个[]
总是有不同的数字。我希望将hardwareSet[articles][WhatEverNumberIsHere]
更改为类似hardwareSetRAM
的字符串。
我怎么能这样做,你能帮助我吗?
答案 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);
}