in reply to Re: capturing matching parenthesis
in thread capturing matching parenthesis

Fine, unless you care about the possibility of escaped parens. For example, '( ( \( two ) )' would fail with your method unless you specifically were watching for that sort of thing with additional logic.


Dave

Replies are listed 'Best First'.
Re: Re: Re: capturing matching parenthesis
by muba (Priest) on Apr 15, 2004 at 21:16 UTC
    Hmm, I was indeed not taking care of backwhacks.

    But then, the method would not change that much. Also keep track of another variable, let's call it $escape. Set it to 1 if you find a \. Then, in the next iteration of the loop, if that character is a ( or ) and $escape != 0, ignore it. If it is a backslash, ignore it too. Then set $escape back to 0.
      You'll also need a special case for '( \\( ( three ) ) )'. In this case, there are three sets of parens, because the backslash itself is escaped.

      The solutions quickly become ugly, complex, and error-prone, which is why the tried and proven module Text::Balanced is a good idea.

      Update: Ok, MUBA's approach handles the escaped-backslash case too.

      My point is that if the idea of Perl is to make easy things simple and difficult things possible, I'd favor an approach that takes it a step further by making a difficult thing easy for me.


      Dave

        That is being taken care of. Read my previous reply.

        I said to ignore a backslash when $escape != 0, that is, when the previous character is a backslash. Don't worry :)