D 以编程方式替换数组(字符串)中的元素

D 以编程方式替换数组(字符串)中的元素,d,D,D的phobos库是否提供了类似于std.array.replace的函数,该函数可以通过一个函数替换数组中的元素,而不是所有替换的单个值?例如: string[] params = ["Apple", "Orange", "Pear"]; int pnum = 0; string psub() { if (pnum < params.length) return params[pnum++]; return ""; } writeln(replace("T

D的phobos库是否提供了类似于std.array.replace的函数,该函数可以通过一个函数替换数组中的元素,而不是所有替换的单个值?例如:

string[] params = ["Apple", "Orange", "Pear"];
int pnum = 0;
string psub() {
    if (pnum < params.length)
        return params[pnum++];
    return "";
}
writeln(replace("Test 1=? 2=? 3=? 4=?", "?", psub));
string[]参数=[“苹果”、“橘子”、“梨”];
int pnum=0;
字符串psub(){
if(pnum<参数长度)
返回参数[pnum++];
返回“”;
}
写入(替换(“测试1=?2=?3=?4=?”、?psub));
当期望的结果当然是测试1=苹果2=苹果3=苹果4=苹果时,测试1=苹果2=橙色3=梨4=您可以从
std.regex
使用:

writeln(replaceAll!(s => psub())("Test 1=? 2=? 3=? 4=?", `\?`));
或者,您可以使用
拆分器
和范围:

zip(StoppingPolicy.longest, "Test 1=? 2=? 3=? 4=?".splitter("?"), params)
    .map!(a => only(a.expand))
    .joiner()
    .joiner()
    .writeln();

看起来像SQL语句中的参数。:)问题是“?”可能会作为我们不想替换的内容出现在字符串中。如何逃避呢?有“\?”吗?