Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
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 (Monsignor) 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 taking refuge in the Monastery: (5)
As of 2014-09-30 23:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (385 votes), past polls