Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

parsing a line

by kurtcobain (Novice)
on Nov 19, 2012 at 22:31 UTC ( #1004622=perlquestion: print w/ replies, xml ) Need Help??
kurtcobain has asked for the wisdom of the Perl Monks concerning the following question:

if( $abc =~ /(?:PickMaster 3)(\w+)\s+/s) { print $1; } $abc = The following ABB products and versions are affected: ABB Interlink Module: Versions 4.6 through 4.9 IRC5 OPC Server: Versions up to and including 5.14.01 PC SDK: Versions up to and including 5.14.01 PickMaster 3: Versions up to and including 3.3 PickMaster 5: Versions up to and including 5.13 Robot Communications Runtime: Versions up to and including 5.14.01 RobotStudio: Versions supporting IRC5 up to and including 5.14.01 RobView 5: Works together with other products listed here. WebWare SDK: Versions 4.6 through 4.9 WebWare Server: Versions 4.6 through 4.91

Hi Monks, I am trying to serach for a keyword in the above paragraph and print the line corresponding to that keyword. In the above code , i am trying to print the text " Versions up to and including 3.3 " . I am unable to do that with my regex.Please guide me.

Comment on parsing a line
Download Code
Re: parsing a line
by kennethk (Abbot) on Nov 19, 2012 at 22:43 UTC

    You are having trouble because : is not a 'word character' -- see Using character classes in perlretut. Easiest solution would be to remove the s modifier (Modifiers) and use .+, which will match every character except a newline (once you remove s).


    #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Re: parsing a line
by Kenosis (Priest) on Nov 19, 2012 at 22:44 UTC

    You're almost there! Try the following:

    use strict; use warnings; my $abc = <<END; The following ABB products and versions are affected: ABB Interlink Module: Versions 4.6 through 4.9 IRC5 OPC Server: Versions up to and including 5.14.01 PC SDK: Versions up to and including 5.14.01 PickMaster 3: Versions up to and including 3.3 PickMaster 5: Versions up to and including 5.13 Robot Communications Runtime: Versions up to and including 5.14.01 RobotStudio: Versions supporting IRC5 up to and including 5.14.01 RobView 5: Works together with other products listed here. WebWare SDK: Versions 4.6 through 4.9 WebWare Server: Versions 4.6 through 4.91 END print "$1\n" if $abc =~ /(?:PickMaster 3:\s+)([^\n]+)/s;

    Output:

    Versions up to and including 3.3
      i tried this and it worked. if( $abc =~ /(?:$product\:)\s(\w.+)\s+/) { print $1; } Thanks for the guidance monks
      Substituting print "$1\n" if $abc =~ /PickMaster 3:(.*)/; works, too. Is there any reason not to use it? Seems a lot more readable.

        Yes--much better.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1004622]
Approved by 2teez
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (7)
As of 2015-07-05 14:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (67 votes), past polls