是否有可能返回用于创建正则表达式的文本?
像这样的东西:
auto r = regex(r"[0-9]", "g"); // create regular expression
writeln(r.dumpAsText()); // this would write: [0-9]
http://dlang.org/phobos/std_regex.html对此没有任何内容。(或者至少我没有注意到)
是否有可能返回用于创建正则表达式的文本?
像这样的东西:
auto r = regex(r"[0-9]", "g"); // create regular expression
writeln(r.dumpAsText()); // this would write: [0-9]
http://dlang.org/phobos/std_regex.html对此没有任何内容。(或者至少我没有注意到)
通常使用子类型会起作用,但不幸的是,由于模板约束失败,ti 不会。例如,一个合理的解决方案(现在不起作用)是将正则表达式包装为子类型:
auto myregex(string arg1, string arg2)
{
struct RegexWrap
{
Regex!char reg;
alias reg this;
string dumpAsText;
}
return RegexWrap(regex(arg1, arg2), arg1);
}
void main()
{
auto r = myregex(r"[0-9]", "g"); // create regular expression
writeln(r.dumpAsText); // this would write: [0-9]
writeln(match("12345", r)); // won't work
}
match
即使使用子类型,std.regex 中的函数也无法与此包装器结构一起使用,因为它失败了此模板约束:
public auto match(R, RegEx)(R input, RegEx re)
is(RegEx == Regex!(BasicElementOf!R)
即使您将标题更改为此,它仍然无法正常工作:
public auto match(R)(R input, Regex!(BasicElementOf!R) re)
唯一可行的方法是如果类型是显式的,则可以传递子类型:
public auto match(R)(R input, Regex!char re)
我发现这是 D 中一个尴尬的部分,可以改进。