On Nov 25, 2006, at 7:14 AM, Peter Dyballa wrote:
Am 25.11.2006 um 04:01 schrieb Dieter Wilhelm:
So "{[^}]*}" stands for 'a region that starts with `{´ and has no `}´
until the final `}´ is hit; between both braces any number (starting
with 0) of any character except `}´ can appear.'
Thanks Peter for the hassle. Maybe I expressed myself in a confusing
manner: The period and the character alternatives I understand. What
I really wanted to know is where to look for a possibility of
searching for *balanced* brackets like { { } } because I'll need this
in my own Elisp stuff. It's clear that there is some code in Emacs
for it (e. g. C-M-f etc.) but I have a hunch that there might be
something else out there. Maybe a regexp extension in Perl or ...
I think you can't use one regular expression for a variety of nested "*balanced* brackets like { { } }".
For the curious: regular expressions create what is called a deterministic finite automata (DFA). Also known as a state machine. They can not "count" which is what you ask asking for. A simple "reason" is because the count can be infinite (although that explanation leaves out much).
The next level up in language parsing theory is a push down automata (PDA). This is, roughly speaking, a DFA coupled with a stack. The stack is infinite. So, it now has the power to count.
The easiest way to do a PDA in lisp is with recursive decent and a rather simple lisp function can call itself when it hits a second { and return when it hits a }. When the last function returns, you have hit the matching } of the first {.
All that aside, emacs has code written to balance parens, braces, brackets, etc. You can look at forward-sexp as a starting point. And, in the case of emacs, it is pretty flexible. By specifying syntax tables, you can tell it what characters match each other. Look at modify-syntax-entry for that piece of the puzzle.
Hope this helps...
Low cost SATA Disk Systems for IBMs p5, pSeries, and RS/6000 AIX systems