Совершенно другой подход состоит в том, чтобы попробовать грамматику синтаксического анализа (PEG) . PEG сталкивается с проблемой сопоставления с образцом с точки зрения синтаксического анализатора и может даже использовать преимущества нескольких правил, образующих полную грамматику. Это позволяет писать выражения, соответствующие сбалансированным круглым скобкам, которые в других случаях довольно трудно выразить в большинстве диалектов регулярных выражений.
Хотя PEG относительно новы, должно быть несколько реализаций, которые можно использовать из C.
Я лично использовал реализацию PEG LPeg . Он аккуратно связан с Луа и по совпадению был написан одним из главных авторов Луа, Роберто Иерусалимским. Он обеспечивает полную реализацию PEG, а также содержит адаптер, который переводит регулярное выражение в эквивалентный PEG для выполнения.
Связывание ядра Lua с C-программой только для того, чтобы получить доступ к LPeg, может показаться излишним, но на самом деле это будет не так сложно, даже если вы не планируете использовать Lua для других целей.