in reply to how do I check for this rule


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.

Replies are listed 'Best First'.
Re: Re: how do I check for this rule
by Roger (Parson) on Nov 19, 2003 at 10:35 UTC
    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)/;