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.
On Mon, Jan 31, 2011 at 5:05 PM, Jarmo Pertman <jarmo.p@gmail.com> wrote:
Hi!
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 Recursive Regular Expressions
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/((?<pg>\((?:\\[()]|[^()]|\g<pg>)*\)))/
=> /((?<pg>\((?:\\[()]|[^()]|\g<pg>)*\)))/
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
=> #<MatchData "(stri\\)\\((()x)(((c)d)e)\\))"
pg:"(stri\\)\\((()x)(((c)d)e)\\))">
irb(main):004:0> mt[1]
=> "(stri\\)\\((()x)(((c)d)e)\\))"
On Tue, Feb 1, 2011 at 12:05 AM, Jarmo Pertman <jarmo.p@gmail.com> 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 Recursive Regular Expressions
It seems that you've given wrong link as i've unable to find anything
regarding "regular expressions" in that pdf.
Jarmo
···
On Feb 1, 5:34 am, Josh Cheek <josh.ch...@gmail.com> wrote:
On Mon, Jan 31, 2011 at 5:05 PM, Jarmo Pertman <jarm...@gmail.com> wrote:
> Hi!
> 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
>Recursive Regular Expressions
> It seems that also PHP has such a functionality.
It is in section "what's new in Ruby 1.9.2" on page 24
···
On Tue, Feb 1, 2011 at 2:50 AM, Jarmo Pertman <jarmo.p@gmail.com> wrote:
Thanks!
It seems that you've given wrong link as i've unable to find anything
regarding "regular expressions" in that pdf.
Jarmo
On Feb 1, 5:34 am, Josh Cheek <josh.ch...@gmail.com> wrote:
> On Mon, Jan 31, 2011 at 5:05 PM, Jarmo Pertman <jarm...@gmail.com> > wrote:
> > Hi!
>
> > 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
> >Recursive Regular Expressions
>
> > It seems that also PHP has such a functionality.
>
> > Jarmo
>
> 1.9.2 has it, here is an example:
>
> regex = /^(?<bracketed>\[(\g<bracketed>|\d)\])$/
> '1'.match regex # => nil
> '[1]'.match regex # => #<MatchData "[1]" bracketed:"[1]">
> '[[1]]'.match regex # => #<MatchData "[[1]]" bracketed:"[[1]]">
> '[[[1]]]'.match regex # => #<MatchData "[[[1]]]" bracketed:"[[[1]]]">
>
> I found it in the Christmas edition of PragPub ( http://pragprog.com/magazines/download/19.PDF\) they talk about it more in
> depth, as well, if you want more info.