Поочереди вытащить SIN(X) из выражения SIN(SIN(20 + 20)) + COS(20)

Рейтинг: 1Ответов: 2Опубликовано: 19.05.2011

Проблема в том, что регулярка должна вытаскивать первое совпадение с парным количеством скобок. То есть по логике программы, из этого выражения она должна вытянуть

0:SIN(20 + 20)
1:20+20

Или еще пример:

SIN(20) + SIN(SIN(30) - SIN(40))

должна вытянуть:

0:SIN(20)
1:20

А из

SIN(20 - SIN(40))

должна вытянуть:

0:SIN(40)
1:40

Язык C#, .NET 4.0!

Ответы

▲ 3Принят

Попробуйте так:

SIN\(([^()]+)\)
▲ 2

Ай, не решаются такие задачи регулярками, сделайте лучше на конечных автоматах.

UPD

Да, есть замечательный алгоритм, называется "рекурсивный спуск" на нём можно построить парсер математических выражений, с переменными функциями и прочими радостями, попробуйте погуглить и реализовать. Если нужно и у меня будет время - то изложу ентот алгоритм с примерами