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

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.
  • Comment on Re: Re: Re: capturing matching parenthesis

Replies are listed 'Best First'.
Re: Re: Re: Re: capturing matching parenthesis
by davido (Cardinal) on Apr 15, 2004 at 21:22 UTC
    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 :)