Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^2: matching multiple patterns in one line

by james28909 (Deacon)
on Nov 18, 2015 at 19:03 UTC ( [id://1148048]=note: print w/replies, xml ) Need Help??


in reply to Re: matching multiple patterns in one line
in thread matching multiple patterns in one line

On a side note, how could i put my sample above on one line? I mean without for(@lines){print ...};

How could i make it in one line, as in 'print $_ . "\n" /stuff to match in @lines/ for(@lines)'?

Replies are listed 'Best First'.
Re^3: matching multiple patterns in one line
by AnomalousMonk (Archbishop) on Nov 18, 2015 at 19:55 UTC

    Adapting toolic's approach above:

    c:\@Work\Perl\monks>perl -wMstrict -le "my $line = '2011-01-01 15:34:554 some words and numbers then email@ho +st.com'; printf qq{date '%s' time '%s' email '%s' \n}, (split /\s+/, $line)[0, + 1, -1]; " date '2011-01-01' time '15:34:554' email 'email@host.com'
    But why do you care that it's on one line and/or without a for-loop?

    Update: Or, if you want to go the regex route:

    c:\@Work\Perl\monks>perl -wMstrict -le "my $rx_d = qr{ \d{4} - \d\d - \d\d }xms; my $rx_t = qr{ \d\d : \d\d : \d\d }xms; my $rx_e = qr{ \S+ }xms; ;; my $line = qq{2011-01-01 15:34:55 blah blah yada email\@host.com\n}; print qq{[$line]}; printf qq{d '%s' t '%s' e '%s' \n}, $line =~ m{ \A ($rx_d) \s+ ($rx +_t) .*? ($rx_e) \s* \z }xms; " [2011-01-01 15:34:55 blah blah yada email@host.com ] d '2011-01-01' t '15:34:55' e 'email@host.com'
    I suppose the definitions of all the  qr// regex objects make this more than one line, but that's life. Also, I hope you can come up with a better e-mail address regex than mine.


    Give a man a fish:  <%-{-{-{-<

      Maybe This will be a good enough regex for testing if string is an email? lol

      EDIT:I guess it really depends on what "some words and numbers" contains. and I dont know of any words that have '@' in it unless we are texting haha.
Re^3: matching multiple patterns in one line
by stevieb (Canon) on Nov 18, 2015 at 19:16 UTC

    One way that seems to do what you're looking for:

    print "$_\n" for grep {$_ =~ /$regex/} @lines;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1148048]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (8)
As of 2024-04-23 10:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found