Eclesiastes

Icon

Sobre o que é este blog? O.o

Combinações aninhadas

A pouco descobri que a Microsoft inovou no suporte a expressões regulares no .NET a muito tempo atrás! (Como estou atrasado!) Ele suporta Balanced grouping, onde por meio dele é possível fazer uma expressão regular analisar aninhadamente. Que basicamente funciona da seguinte forma: é permitido a criação de um grupo nomeado, por exemplo: (?<DEPTH>), que a cada vez que ele aparece numa iteração é armazenado na backtracking stack, ajudando a marcar assim, a profundidade para encerrar os nós analisados. E para subtrair, utilizamos (?<-DEPTH>)(Veja mais detalhes sobre essa construção no link da MSDN) , o que indicará que um nó foi fechado.

Copiando o exemplo do Greg Reinacker’s Weblog

Temos a seguinte ER:
<div>(?><div(?<DEPTH>)|</div(?<-DEPTH>)|.?)*(?(DEPTH)(?!))</div>

Onde será combinado a parte em negrito:
<div>this is some <div>red</div> text</div></div></div>

Referências

» http://www.rassoc.com/gregr/weblog/archive.aspx?post=590
» http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpcongroupingconstructs.asp
» http://www.mamiyami.com/document/regex/0596002890_mastregex2-chp-9-sect-6.html

Arquivado como:Regex

One Response

  1. austin disse:

    I am interested in cash backs. I shop a lot so I want to get at least some of my money back. So I’ve found this very helpful site with credit card comparison

    instant discover card

Leave a Reply