bearophile wrote:
Andrei Alexandrescu:
auto data = ">hello1 how are5 you?<";
auto iter = match(data, regex(r".*?(hello\d).*?(are\d).*"));
foreach (i; 0 .. iter.engine.captures)
writeln(iter.capture[i]);
I don't understand that.
What's the purpose of ".engine"?
It's the regex engine that has generated the match. I coded that wrong
in two different ways, it should have been:
foreach (i; 0 .. iter.captures)
writeln(iter.capture(i));
"captures" may be better named "ngroups" or "ncaptures", or you may just use
the .len/.length attribute in some way.
"Capture" is the traditional term as far as I understand. I can't use
.length because it messes up with range semantics. "len" would be too
confusing. "ncaptures" is too cute. Nobody's perfect :o).
foreach (i, group; iter.groups)
writeln(i " ", group);
"group" may be a struct that defines toString and can be cast to string, and
also keeps the starting position of the group into the original string.
That sounds good.
Andrei