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如果是这样的话,他们应该投票决定“太宽了”。它怎么不起作用?