Regex match in for loop

H. S. Teoh via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jul 15 13:31:54 PDT 2014


On Tue, Jul 15, 2014 at 08:18:55PM +0000, seany via Digitalmars-d-learn wrote:
> Consider this:
> 
> import std.stdio, std.regex, std.array, std.algorithms ;
> 
> void main(string args[])
> {
> 
> string[] greetings = ["hello", "hallo", "hoi", "salut"];
> 
> regex r = regex("hello", "g");
> 
> for(short i = 0; i < greetings.count(); i++)
> {
> 
>   auto m = match(greetings[i], r);
> }
> 
> }
> 
> To the best of my knowledge, declaring a variable inside a for loop is
> illegal, you can not delacre the same variable repeatedly over the
> iterations.

Says who? Each instance of 'm' only exists for the duration of a single
loop iteration, so it's perfectly fine to reuse the same name the next
time round. It would be a horribly crippled language if you couldn't
declare temporary variables inside the loop body!


> Also just the declaration auto m; outside the for loop does not make
> sense either - auto needs an Right Hand Side expression.
> 
> So what is the correct way of doing it?

What you have is already (mostly) correct, except:

(1) You misspelled 'std.algorithm' as 'std.algorithms';

(2) Your declaration of 'r' should use 'auto', not 'regex':

	auto r = regex("hello", "g");

    Or, if you wish to be explicit, the correct type name is
    'Regex!char':

	Regex!char r = regex("hello", "g");

Once you fix (1) and (2), the code will work just fine.


T

-- 
Indifference will certainly be the downfall of mankind, but who cares? -- Miquel van Smoorenburg


More information about the Digitalmars-d-learn mailing list