Алгоритм создания n-го уровня вложенных шаблонов в RegEx
Как объяснено вМожно ли использовать регулярные выражения для сопоставления с вложенными шаблонами?, невозможно создать регулярное выражение для сопоставления с произвольным вложенным шаблоном. Но возможно ли создать алгоритм, который бы генерировал регулярное выражение n-го уровня «нестабильности»?
в основном я хочу заменитьtrim(whatever)
сrtrim(ltrim(whatever))
мне удалось создать 3 уровня вручную (синтаксис javascript):
<code>level[1] = /\(([^()]*)\)/g level[2] = /\(((?:[^()]*\([^()]*\))*[^()]*)\)/g level[3] = /\(((?:(?:(?:[^()]*\([^()]*\))*[^()]*)*\((?:(?:[^()]*\([^()]*\))*[^()]*)*\))*[^()]*)\)/g </code>
Вот некоторые тестовые данные:
<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>
я знаю это на каждом уровне[^()]*
должна быть заменена группой без захвата, которая может содержать круглые скобки, но я не уверен, какgeneralize the algoritm for n-th level...