Algoritmo para criar um n-ésimo nível de padrões aninhados no RegEx
Como explicado emExpressões regulares podem ser usadas para combinar padrões aninhados?, não é possível criar regex para corresponder ao padrão aninhado arbitrário. Mas é possível criar um algoritmo que gere uma regex de n-ésimo nível de "nesteness"?
basicamente, eu quero substituirtrim(whatever)
comrtrim(ltrim(whatever))
Eu consegui criar 3 níveis manualmente (sintaxe javascript):
<code>level[1] = /\(([^()]*)\)/g level[2] = /\(((?:[^()]*\([^()]*\))*[^()]*)\)/g level[3] = /\(((?:(?:(?:[^()]*\([^()]*\))*[^()]*)*\((?:(?:[^()]*\([^()]*\))*[^()]*)*\))*[^()]*)\)/g </code>
Aqui estão alguns dados de teste:
<code>1st(ddd) + 1st(ddd) 2nd(dd(d)) 3rd(a(b) + (cd(h) + d(dfas) + zzz)) 4th(a(b(c(d)))) 8th(a(b(c(d(e(f(g())))))) </code>
Eu sei que em todos os níveis[^()]*
precisa ser substituído por um grupo não capturado que pode conter parênteses, mas não sei comogeneralize o algoritmo para o n-ésimo nível...