On May 10, Dave Chappell said:

>I read a file line by line, on each line if any numbers in the range
>specified below exist between comas, 
>
>Example: 
>Line 1> hello,world,123,,
>Line 2> The grass,456, is,greener,
>Line 3> On,533,the,other, side
>Line 4> As, long, as the,10000,grass is watered
>Line 5> Bye,world,680,,
>
>print the line to another file. I have tried different variations. In the
>example above and based on my ranges, line 3 & 5 should be printed to
>another file. Where am I going wrong?

>(/,[512..520|528..568|576..578|592..600|608..622|624..670|672..685|768..771]

You can't do that.  A character class is for CHARACTERS, not strings.  And
ranges don't work like that either.

You could do something like this:

  my $num_rx = join '|', 512..520,528..568,576..578, ...;
  while (<FILE>) {
    if (/,($num_rx),/) {
      print "got #$1\n";
    }
  }

Or you could make a regex that matches those ranges of numbers, but that's
a considerably more daunting task:

  /5(?:1[2-9]|2[089]|[345]\d|6[0-8]|7[678]|...)/

I think the above method is better in the long run.

-- 
Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for?  <tenderpuss> why, yansliterate of course.
[  I'm looking for programming work.  If you like my work, let me know.  ]


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to