Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

how do I check for this rule

by Anonymous Monk
on Nov 19, 2003 at 10:07 UTC ( [id://308257]=perlquestion: print w/replies, xml ) Need Help??

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

All occurances of XXX should be followed by 0 or more blank spaces, 1 or more newline, and then YYY

Replies are listed 'Best First'.
Re: how do I check for this rule
by moxliukas (Curate) on Nov 19, 2003 at 10:14 UTC
    /XXX\s*\n+YYY/sg;

    UPDATE: I have misread the question first and thought that the monk wanted to find all occurances rather than validate them. Please read the answer that Roger provided below. That's what English being not the first language does for you -- my mistake.

      Hang on, not so fast. ;-)

      Your regular expression will only find matching occurances of XXX ... YYY, *NOT* to validate all occurances.

      To validate a sequence, you will have to make sure there is no mismatches of XXX, and hence require a bit more work.

      use strict; my $data; { local $/; $data = <DATA>; } # number of times didn't match XXX ... YYY # is total number of XXX minus the XXX ... YYY # pattern appears. my $non_match = $#{[$data =~ /(XXX)/gs]} - $#{[$data =~ /(XXX\s*\n+YYY)/gs]}; print !$non_match ? "All sequences of XXX - YYY are ok\n" : "$non_match bad sequences found\n"; __DATA__ XXX YYY XXX ZZZ XXXYYY
        Or just:
        $str !~ /XXX(?!\s*\n+YYY)/;

        Abigail

Log In?
Username:
Password:

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

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

    No recent polls found