From: Robert Klemme Date: 2011-02-01T17:38:27+09:00 Subject: Re: Recursive regular expressions in Ruby? On Tue, Feb 1, 2011 at 12:05 AM, Jarmo Pertman wrote: > I was just wondering if there is possible to write recursive regular > expressions in Ruby? As i'm understanding at this moment then there > isn't. Prove me wrong. > > If you're not aware of such possibility in Perl for example then here > is one good blog post about it http://www.catonmat.net/blog/recursive-regular-expressions > > It seems that also PHP has such a functionality. Strictly speaking these are no more regular expressions any more because the set of languages that they can detect exceeds the set of regular languages. Normally you need at least a parser for a context free language to detect nested brackets etc. (There are quite a few parser generators available for Ruby.) But: Oniguruma can do it, too: Ruby version 1.9.2 irb(main):001:0> re = %r/((?\((?:\\[()]|[^()]|\g)*\)))/ => /((?\((?:\\[()]|[^()]|\g)*\)))/ irb(main):002:0> s = 'some(stri\)\((()x)(((c)d)e)\))ng' => "some(stri\\)\\((()x)(((c)d)e)\\))ng" irb(main):003:0> mt = s.match re => # irb(main):004:0> mt[1] => "(stri\\)\\((()x)(((c)d)e)\\))" http://www.siaris.net/index.cgi/+Programming/LanguageBits/Ruby/Oniguruma.rdoc Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/