in reply to pattern matching

A simple pattern match to return 10000000 for the ID and 12000000 for the P_ID would be:

/:ID\s(\d*).*:P_ID\s(\d*)/

You can then refer to the matches using $1 and $2 respectively.

Hope this helps.
-- Foxcub

Replies are listed 'Best First'.
Re: Re: pattern matching
by Anonymous Monk on Aug 21, 2002 at 11:53 UTC
    Thanx again!:) Does the snippet work if there are more than one ID/P_ID in an array element?
      If you want to act on more than one id then try
      while ($arrayElement =~ /:ID\s(\d*).*:P_ID\s(\d*)/g ) { print $1,$2,"\n"; # just an example }
      The /g gets all matches of the regex, so the captured bit ($1,$2) will be updated for each match in the while loop.
      For that, you'd want to use the global (/g) modifier on the end of your regex, and use the regex in a list context:
      @ids = m/:ID\s\d*/g

      You'll need to do another regex to pull the P_IDs,
      @p_ids = m/:P_ID\s\d*/g,
      and you won't be able to use backreferencing to ditch the ":ID " part.

      For that, I guess you could use another regex, or, if the data is regular, something like:
      for $i (0..$#ids) {$ids[Ģi] = substr ($ids[$i], 4);}

      No, you'll have to think a little here.

      Hotshot