in reply to Determing what part of a regex matched.
$regex = '(\w+)|(\d+)|(\s+)|([^\w\d\s]+)'; $text = 'The world is foo 2!'; while ( $text=~s/^$regex// ) { print '\w+',$/ if $1; print '\d+',$/ if $2; print '\s+',$/ if $3; print '[^\w\d\s]+',$/ if $4; }
You could do something like the above, where $1 .. $4 deal represent which set of parens matched. Note that I changed the .*? to [^\w\d\s]+, as I assumed this is what you meant, as .*? will try to match nothing first (which it will always do and replace it with nothing (as per s/// operation). So your code was probably looping forever.$regex = '(\w+)|(\d+)|(\s+)|([^\w\d\s]+)'; $text = 'The world is foo 2!'; while ( $text=~s/^$regex// ) { print '\w+',$/ if defined $1; print '\d+',$/ if defined $2; print '\s+',$/ if defined $3; print '[^\w\d\s]+',$/ if defined $4; }
Also the $1 was not printing as there were no capturing parens in your regular expression.
update: striked out old code, and updated it as per Abigail-II's suggestion below.
-enlil
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Determing what part of a regex matched.
by Abigail-II (Bishop) on Mar 06, 2003 at 01:15 UTC | |
|
Re: Re: Determing what part of a regex matched.
by Anonymous Monk on Mar 06, 2003 at 03:37 UTC |