in reply to Regex Help

Hi, Ok two problems. The first is that your pattern makes me uneasy. The usual way to sort this type of problem is figure out what you dont want to match. So instead of saying
m/\((.*?)\)/g;
I would prefer to see
m/\(([^)]*)\)/gm;
I suppose in pure terms both work acceptably, but the class one seems more understandable as 'up to a )' to me.
use strict; use warnings; my $s=<<EOF; [whois.arin.net] Fuse Internet Access (NETBLK-FUSE-NET-BLK-1) FUSE-NET-BLK-1 216.68.0.0 - 216.68.255.255 Fuse Modem Ports (NETBLK-FUSE-216-68-32-0) FUSE-216-68-32-0 216.68.32.0 - 216.68.47.255 EOF if (my @parts = ($s=~/\(([^)]*)\)/gm)) { print "\n@parts\n"; }
And secondly, using the match in list contents gives you all of the matches you need.

Update: Fixed my incorrect observation about the m modifier for the regex as correctly pointed out by dvergin in comment on Re: Regex Help. My apologies

HTH

Yves
--
You are not ready to use symrefs unless you already know why they are bad. -- tadmc (CLPM)

Replies are listed 'Best First'.
Re: Re: Regex Help - Correct use of /m
by dvergin (Monsignor) on Sep 07, 2001 at 02:51 UTC
    Regarding: "M for 'multiline' matching, ie dont stop at the new line".

    Ummm... no. The '/m' modifier only effects the matching of '^' and '$' (when used to match beginning-of-line, end-of-line). It allows these two symbols to match newlines within the string.

    The regex m/\(([^)]*)\)/g, will match across new lines. More specifically, the regex m/[^)]/ will match a newline quite happily. if ( "\n" =~ /[^)]/ ) {print "Yes\n"} Yes

      Very true.
      I apologise. For some reason I got confused. For me the mantra is 'Ignore, multi-line, as single,' and I forgot the ^$ part.
      And yes I did want to match a newline with my class. What if one were embedded in the () (forget the origin of the text for a second)
      Ill fix my post.

      Yves
      --
      You are not ready to use symrefs unless you already know why they are bad. -- tadmc (CLPM)