I have a RegexMatch that I want to pass to a function that takes the match and replaces various tokens in a string with the match and/or individual groups of the match. I'm struggling to figure out how to pass a RegexMatch to a function, right now I have code like the follows:

RegexMatch regexMatch = matchAll(urlMatch.match, regex(tr.pattern, tr.caseless?"i":""));
string command = replaceMatchTokens(urlMatch.match, regexMatch);

...

string replaceMatchTokens(string tokenizedText, ref RegexMatch match) {
    string result = tokenizedText.replace("$0", match.match);

    int i = 0;
    foreach(group; match.captures) {
        result = result.replace("$" ~ to!string(i), group);
        i++;
    }
    return result;
}

When I try to compile this, it fails with the follow on the line where replaceMatchTokens is declared:

Error: struct std.regex.RegexMatch(R, alias Engine = ThompsonMatcher) if (isSomeString!R) is used as a type

I've also tried declaring it as follows:

string replaceMatchTokens(string tokenizedText, ref RegexMatch!(string, ThompsonMatcher) match) {

With the following errors:

source/gx/terminix/terminal/terminal.d(1273,28): Error: struct std.regex.RegexMatch(R, alias Engine = ThompsonMatcher) if (isSomeString!R) is used as a type source/gx/terminix/terminal/terminal.d(2701,54): Error: template std.regex.match cannot deduce function from argument types !()(RegexMatch!(string, ThompsonMatcher)), candidates are: /usr/include/dlang/dmd/std/regex/package.d(777,13): std.regex.match(R, RegEx)(R input, RegEx re) if (isSomeString!R && is(RegEx == Regex!(BasicElementOf!R))) /usr/include/dlang/dmd/std/regex/package.d(785,13): std.regex.match(R, String)(R input, String re) if (isSomeString!R && isSomeString!String) /usr/include/dlang/dmd/std/regex/package.d(792,13): std.regex.match(R, RegEx)(R input, RegEx re) if (isSomeString!R && is(RegEx == StaticRegex!(BasicElementOf!R)))

Reply via email to