April 09, 2021

I've got,
import std.regex: regex,matchAll;
...
string regfiltertext="\b"~entryfilter.getText()~"\b";
auto reg = regex(regfiltertext);
auto result = name.strip("_").matchAll(reg);
int t=0;
foreach (c; result) t+=1;

This make t the number of regular expressions matches.
Is there a better way to have the number of matches ?

April 09, 2021

On Friday, 9 April 2021 at 15:01:58 UTC, Alain De Vos wrote:

>

I've got,
import std.regex: regex,matchAll;
...
string regfiltertext="\b"~entryfilter.getText()~"\b";
auto reg = regex(regfiltertext);
auto result = name.strip("_").matchAll(reg);
int t=0;
foreach (c; result) t+=1;

This make t the number of regular expressions matches.
Is there a better way to have the number of matches ?

matchAll returns RegexMatch which is a ForwardRange, so it should be possible to get it's length using walkLength.

    auto r = regex(`([a-z])a`);
    auto result = "banana".matchAll(r);
    writeln(result); // [["ba", "b"], ["na", "n"], ["na", "n"]]
    writeln(result.walkLength); // 3

I'm not familiar with using matches with std.regex, but I hope this solves your problem.