是否有可能返回用于创建正则表达式的文本?
这样的事情:
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中没有任何内容。 (或者至少我没有注意到)
答案 0 :(得分:3)
答案 1 :(得分:1)
通常使用子类型会起作用,但不幸的是,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
}
即使使用子类型,std.regex中的match
函数也无法使用此包装器结构,因为它无法使用此模板约束:
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的一个可以改进的尴尬部分。