http://qs321.pair.com?node_id=1108066


in reply to Re: Regex \. help
in thread Regex \. help

Loops: You read the OP a bit more slowly and carefully, and came closer, I think, to answering codz67's question as a result. But the  (\.\d+)? is redundant for the given inputs and outputs if the negative look-ahead is used. (Had it been needed, it would probably have been better as a  (?:...) non-capturing group.)

c:\@Work\Perl>perl -wMstrict -le "my @t = qw( regex regex.1 regex.12 regex.1a regex.a regex.abc regex.a +1 oregex.2 ); for (@t) { printf qq{'$_'}; printf ' matches!' if /^regex(?!\.[^\d])/; print ''; } " 'regex' matches! 'regex.1' matches! 'regex.12' matches! 'regex.1a' matches! 'regex.a' 'regex.abc' 'regex.a1' 'oregex.2'

Replies are listed 'Best First'.
Re^3: Regex \. help
by Loops (Curate) on Nov 22, 2014 at 01:30 UTC

    Hi,

    Yeah you're right about that. I confess to removing the non-capturing annotation for simplicity sake. Here's a slightly different version where the \d* isn't redundant:

    my @t = qw( regex regex. regex.1 regex.12 regex.1a regex.a regex.abc r +egex.a1 oregex.2 ); say s/^regex(?!\.[^\d])(\.\d*)?/|$&|/r for (@t);
    |regex| |regex.| |regex.1| |regex.12| |regex.1|a regex.a regex.abc regex.a1 oregex.2
      #!/usr/bin/perl @filename = `ls | grep "^regex\.[0-9]"`; print @filename; ...

      prints regex.1. I need it to print regex and regex.1:

      #!/usr/bin/perl @filename = `ls | grep "^regex\.?[0-9]"`; print @filename;

      Doesnt print anything.

      Shouldnt the ? match the . zero or more times? If so why doesnt it print regex and regex.1 As for the .abc I need that to be excluded when it greps. So regex.abc and regex.xyz wont print.

      Thank you for the help so far, I am still stuck on making this work. I will continue to try to make this work, if anyone could assist further I would be very thankful.