Я хотел бы использовать парсер Regex, чтобы помочь в некоторой обработке строк в приложении C. В идеале я ищу что-нибудь легкое и с открытым исходным кодом. Целевая платформа - это встроенная система, поэтому мы стремимся максимально сэкономить, в частности, за счет потребления памяти. Я нашел несколько вариантов в Интернете, но мне было интересно, может ли кто-нибудь сделать дополнительные предложения, которые могут помочь в этом конкретном контексте.
Большое спасибо,





Если вам не требуется полнофункциональная реализация регулярного выражения (а похоже, что вам этого не нужно), то код, написанный Брайаном Керниганом и Робом Пайком, выделенный в Красивый код, вероятно, будет работать для ваших нужд. Я нашел статью доктора Добба, который, как мне кажется, является источником кода, который фигурирует в книге.
Сцинтилла, компонент текстового редактора с открытым исходным кодом, использует Двигатель RE Озана С. Йигита
Он был выбран, потому что он является общественным достоянием (так что не обременяет лицензию) и очень легкий. Но он немного ограничен ... Как бы то ни было, RESearch.cxx использует немного более современный код (преобразованный в C++, но его не должно быть сложно преобразовать обратно в C) с некоторыми небольшими расширениями, сделанными мной (поддержка \ d \ s \ w и т. д.).
Есть несколько альтернатив, например Библиотеки регулярных выражений Генри Спенсера.
Если подумать, движок регулярных выражений Lua (в строковой библиотеке, реализация gsub среди прочего), вероятно, тоже быстрый и маленький, как и сам язык. У него есть свои особенности и ограничения, но он очень удобен.
Побочный проект LPeg может быть интересной альтернативой RE, он по-прежнему легкий, но мощный.
Учитывая ваши легковесные требования, я бы порекомендовал Библиотека регулярных выражений Генри Спенсера, который реализует Ароматизаторы регулярных выражений POSIX BRE и ERE. Это стандартные разновидности регулярных выражений, с которыми ваши пользователи, вероятно, уже знакомы.
Спасибо за подробности ... Думаю, пока я собираюсь использовать RESearch.cxx. Он делает то, что мне нужно, и, кажется, делает это эффективно. Спасибо!