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

Re: Regular expression and

by davorg (Chancellor)
on Nov 13, 2001 at 15:38 UTC ( [id://125030]=note: print w/replies, xml ) Need Help??


in reply to Regular expression for two required words

Easiest solution is probably to use two regexes.

while (<DATA>) { print if /foo/ && /bar/; } __DATA__ foo bar bar foo foo bar baz barbazfoo foofoobar
--
<http://www.dave.org.uk>

"The first rule of Perl club is you don't talk about Perl club."

Replies are listed 'Best First'.
(crazyinsomniac) Re^2: Regular expression and
by crazyinsomniac (Prior) on Nov 13, 2001 at 16:20 UTC
    or, if you don't know what the words are ahead of time:
    #!/usr/bin/perl -w use strict; my @approved = qw( foo bar); @approved = map { $_ = quotemeta $_; ### very important qr/$_/is; ## available in perl 6, not really needed } @approved; print "The approved list\n", join "\n", @approved; my $merex = join ' && ', map "/$_/", @approved; print "merex \n$merex\n\n"; if(@ARGV) { print "ARGV\n"; while(<DATA>) { print if eval $merex; } } else { while(<DATA>) { my $toprint = 0; for my $r(@approved) { $toprint++ if m/$r/; } print if $toprint == scalar @approved; } } __DATA__ foo bar bar foo foo bar baz barbazfoo foofoobar
    which yields:
    F:\dev>perl f.pl 3
    The approved list
    (?si-xm:foo)
    (?si-xm:bar)merex
    /(?si-xm:foo)/ && /(?si-xm:bar)/
    
    ARGV
    foo bar
    bar foo
    barbazfoo
    foofoobar
    
    F:\dev>perl f.pl
    The approved list
    (?si-xm:foo)
    (?si-xm:bar)merex
    /(?si-xm:foo)/ && /(?si-xm:bar)/
    
    foo bar
    bar foo
    barbazfoo
    foofoobar
    
    F:\dev>

    Chore List: 1 - buy more coffee 2 - re-impress upon davorg the importance of rule 1

     
    ___crazyinsomniac_______________________________________
    Disclaimer: Don't blame. It came from inside the void

    perl -e "$q=$_;map({chr unpack qq;H*;,$_}split(q;;,q*H*));print;$q/$q;"

Re: Re: Regular expression and
by frankus (Priest) on Nov 13, 2001 at 15:50 UTC

    ISTR Camel (2) also indicated this is faster, I'd add word boundaries to davorg's regex too, if the words can also occur within other words ;)

    --

    Brother Frankus.

    ¤

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (None)
    As of 2024-04-25 04:02 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      No recent polls found