in reply to Re: Re: Matching nested begin/ends
in thread Matching nested begin/ends

That just means your test isn't good enough. You are testing whether "begin end end begin" *contains* a matched begin/end pair. My test however anchor the regex to the beginning and end, and hence correctly flag "begin end begin end" as to *not* be a nested begin/end construct.

It's the same that /\d/ is *not* a correct regex to test if a string is a number. It's a test to see if a string contains a number. But if all you want to know is whether a string contains a begin/end delimited substring, all you need is /begin.*end/. No recursion required.

Abigail

Replies are listed 'Best First'.
Re: Re: Matching nested begin/ends
by jryan (Vicar) on Aug 02, 2002 at 23:04 UTC

    I again disagree. Delimited text is generally part of a larger document that needs to be processed. I can see your point that anchoring the regex is the best way to fully verify the text item's syntax. However, why would this be needed? The item must have followed some pattern to be extracted in the first place.

    Also, /begin.*end/ will allow a begin followed by an end, which will allow an item like beginbeginend to pass with no problems; hence recursion is needed.

      Also, /begin.*end/ will allow a begin followed by an end, which will allow an item like beginbeginend to pass with no problems;
      So does your regex:
      $re = /begin (?: (?>[^be]*) |(??{ $re }) | [be] )* end/x; "begin begin end" =~ /$re/ and print "<$&>\n"; __END__ <begin begin end>
      Abigail