【发布时间】:2020-12-17 05:01:43
【问题描述】:
我有多个字符串,我想更改第一个字符串和最后一个字符串之间的字符串。
中间的字符串是动态的,它会发生变化,但第一个和最后一个字符串保持不变。
例如这是字符串,
请注意,这是整个字符串。
%22%3A%7B%22id%22%3A%22XXXXXXXXXXXXXXXXXXXXXX%22%7D%2C%22 %22%3A%7B%22id%22%3A%22YYYYYYYYYYYYYYYYYYYYYY%22%7D%2C%22 %22%3A%7B%22id%22%3A%22ZZZZZZZZZZZZZZZZZZZZZZ%22%7D%2C%22
那么有没有什么函数可以找到所有中间字符串的第一个和最后一个字符串?
我试过这个功能,
private 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);
}
此函数仅替换第一次出现。我想改变所有的出现。
Output of this function
%22%3A%7B%22id%22%3A%22REPLACED___TEXT%22%7D%2C%22
%22%3A%7B%22id%22%3A%22YYYYYYYYYYYYYYYYYYYYYY%22%7D%2C%22
%22%3A%7B%22id%22%3A%22ZZZZZZZZZZZZZZZZZZZZZZ%22%7D%2C%22
它不会改变其他中间字符串。
谢谢!
【问题讨论】:
-
请举例说明您如何调用
replace_between() -
如果字符串由空格分隔(在提供的示例中看起来像这样),您可以使用空格作为分隔符
explode它。分解数组的第二个元素应该给出第二个字符串.. -
@ariefbayu eplace_between(ORIGINAL_STRING,"%22%3A%7B%22id%22%3A%","%22%7D%2C%22","REPLACETEXT") 这将替换第一次出现但所有其他事件都不会改变
-
@user3532758 你在说什么?我没明白。我想替换两个字符串之间的字符串。我为什么要炸它?
-
所以,假设你有 3 行,你想替换这 3 行之间的所有内容,只有一个 ""REPLACE TEXT"?我的意思是,所有三行都将具有相同的内容。 @AbhishekDeshkar