This is actually a real problem I have overlooked with this pull: the pattern matching here is completely strange:
```d
`23 days`.regexSwitch(
          `\[a-z]+`, (string s){ writeln("Some name!"); },
          `\d+`,  (int n){ writeln("Some number! "); }
);
```

Will in fact print `Some name!`. That is the first pattern is _searched_ in input, then if not found the second one is _searched_. Certainly not what I expect it to do.

I expect the code to be roughly equivalent to:
```d
auto m = `23 days`.matchFirst(`([a-z]+)|(\d+)`)
if(!m[1].empty)
   writeln("Some name!");
if(!m[2].empty)
   writeln("Some number!");
```
This will print `Some number!`.
That is searching is done as a one big pattern, with left-to-right priority (just like normal alternations) and  the callback for the subpattern that in fact matched is called (after conversions).