On 4/25/06, Monomachus <[EMAIL PROTECTED]> wrote:
> I need a RegEx (!!!with modify(m//)) what matches the words what ends with
> 'a'.
> =============================
> I have a test_file (for ex.:)
> =============================
> beforematchafter
> wilma and nana
> Mrs. Wilma Flinstone hommie
> barney
> wilma&fred
> wilmafred
> flinstone
> mama&fred
> ==============================
> my_program.pl
> ==============================
> #!/usr/bin/perl -w
> use strict;
> my $i=1;
> while (<>) { # take one input line at time
> chomp;
> if (/(\b\w*a\b)/) {
> print "$1 found in line $i\n";
> $i++;
> } else {
> $i++;
> }
> }
> ==================================
> This program does not match 'nana' line 2 (only wilma) and it DOES atch
> 'wilma&fred' line 5 and line 8 (I think it shouldn't)...
> And is the sign '&' in \w ?? I thought that \w == [a-zA-Z0-9_] or it isn't???
> ==================================
It doesn't match 'nana' because you aren't using the 'g' modifier, so
it exits after the first match and moves onto the next line. And
you're only printing $1 in any case, so even it it matched more, you
wouldn't know:
if ( my @matches = /(\b\w*a\b)/g ) {
print "@matches found in line $.\n";
}
Also note the use of '$.' You don't need to keep track of line
numbers. Perl does it for you.
As for wilma&fred, no, '&' isn't in \w. the regex only captures
'wilma' in 'wilma&fred'. Because '&' isn't a \w character, there's a
\b between the 'a' in wilma and the '&'. if you want to make sure your
\b is at a space or the end of the string, make sure you anchor it:
#!/usr/bin/perl
use strict;
use warnings;
while (<DATA>) { # take one input line at time
chomp;
if (my @matches = /\b(\w*a)\b(?:\s|\z)/g ) {
print join(', ', @matches), " found in line $.\n";
}
}
__END__
beforematchafter
wilma and nana
Mrs. Wilma Flinstone hommie
barney
wilma&fred
wilmafred
flinstone
mama&fred
HTH,
-- jay
--------------------------------------------------
This email and attachment(s): [ ] blogable; [ x ] ask first; [ ]
private and confidential
daggerquill [at] gmail [dot] com
http://www.tuaw.com http://www.dpguru.com http://www.engatiki.org
values of β will give rise to dom!