• XSS.stack #1 – первый литературный журнал от юзеров форума

Вопрос о regex в C++ без CRT

Vodoley

HDD-drive
Пользователь
Регистрация
04.04.2021
Сообщения
26
Реакции
12
Здравствуйте.
Нужно искать регулярные выражения в тексте. Пишу на С++, без CRT, т.е. std::regex использовать не могу.
Главная цель - маленький размер.
Есть парчка вопросов.
В libc есть <regex.h>.
Можно ли его использовать в C++? Ни разу пока не приходилось до этого момента использовать сишные библиотеки в плюсах.
Можно ли его использовать без CRT?
Много ли он весит, большой ли вес файлу прибавит?
К слову, один лишь std::regex из STL дает +40 КБ веса, потому что тянет за собой чуть ли не половину STL, ну и требует CRT.
Если libc плохой вариант в моем случае, то что можете посоветовать? Что обычно в малвари используется для такой задачи?
Заранее спасибо!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
regex.h нельзя использовать без CRT, если не ошибаюсь, это POSIX регулярки;
если брать именно чистый код, то есть всего два варианта
1) как написали выше, заюзать стороннюю либу
2) использовать регулярки с VBscript
Для варианта номер 2 нужно хорошо знать СОМ.
Еще в вин7 есть какая-то апи для простейших регулярок, но увы, негрософт не соизволил выложить по ней матчасти https://docs.microsoft.com/en-us/windows/win32/devnotes/rtlisnameinexpression
 
Пожалуйста, обратите внимание, что пользователь заблокирован
2) использовать регулярки с VBscript
http://script-coding.com/WSH/RegExp.html - судя по тому, как он вызывается в VBScript, это - сторонний IDispatch COM-объект (не встроен в движок), то есть даже если не найдешь к нему правильное определение vtbl, то можно через IDispatch вызывать методы. На самом деле весьма неплохая идея, если нужно минимизировать размер, все-таки regexp-библиотеки достаточно жирные, как не крути их.

Еще в вин7 есть какая-то апи для простейших регулярок, но увы, негрософт не соизволил выложить по ней матчасти
Это скорее всего не регулярки, а сравнение по паттерну, типа как "*.txt" и всякие такие вещи.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
На самом деле весьма неплохая идея, если нужно минимизировать размер, все-таки regexp-библиотеки достаточно жирные, как не крути их.
Вопрос только в надежности и потокобезопасности, а так это тема не новая. Подобное обсуждалось и где-то на этом форуме (году так в 2005) и на старом васме. Обсуждалось в контексте Масм и больше как РоС. Не знаю, юзал ли кто-то это в рабочем проекте или нет..
 
А можн поподробнее, как с С++ это дело вызвать? Спасибо)
http://script-coding.com/WSH/RegExp.html - судя по тому, как он вызывается в VBScript, это - сторонний IDispatch COM-объект (не встроен в движок), то есть даже если не найдешь к нему правильное определение vtbl, то можно через IDispatch вызывать методы. На самом деле весьма неплохая идея, если нужно минимизировать размер, все-таки regexp-библиотеки достаточно жирные, как не крути их.
 
Здравствуйте.
Нужно искать регулярные выражения в тексте. Пишу на С++, без CRT, т.е. std::regex использовать не могу.
Главная цель - маленький размер.
Есть парчка вопросов.
В libc есть <regex.h>.
Можно ли его использовать в C++? Ни разу пока не приходилось до этого момента использовать сишные библиотеки в плюсах.
Можно ли его использовать без CRT?
Много ли он весит, большой ли вес файлу прибавит?
К слову, один лишь std::regex из STL дает +40 КБ веса, потому что тянет за собой чуть ли не половину STL, ну и требует CRT.
Если libc плохой вариант в моем случае, то что можете посоветовать? Что обычно в малвари используется для такой задачи?
Заранее спасибо!
дичь.
во первых. runtime-библиотеки и стандарты c++ - это разные вещи.
во вторых - не хочешь "тянуть библиотеки" - делаешь сам. Если задача парсить строки по заданному шаблону - проще написать самому простой разбор. Тебе же не надо реализацию всей мощи регэкспа? Который к тому же и работает очень медленно. Пишешь свои простые шаблоны обработки - с приемлимой сложностью.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вопрос только в надежности и потокобезопасности, а так это тема не новая. Подобное обсуждалось и где-то на этом форуме (году так в 2005) и на старом васме. Обсуждалось в контексте Масм и больше как РоС. Не знаю, юзал ли кто-то это в рабочем проекте или нет..
если использовать сторонние либы то лучше войти в critical section, не сильная потеря в производительности я думаю
 
Пожалуйста, обратите внимание, что пользователь заблокирован
viloni Через IActiveScript или подобные интерфейсы и через комовский CoCreateInstance(), а затем через QueryInterface() получать IActiveScriptParse
Да нет, IActiveScript интерфейсы тут не особо нужны, после того, как ты создал объект (CLSID можно в реестре посмотреть, если не нагуглится), либо запросить один из его интерфейсов (вангую, что это что-то типа IRegExp2 должно быть), либо запросить IDispatch, и уже и через IDispatch все делать так же, как это делается в примерах на VBScript (вызывать теже методы). Но там, конечно, будет дрочь с тем, что все параметры нужно в виде VARIANT передавать, но что вы еще хотите? На плюсах и сишечке без дрочи не кодят.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Мне просто кажется, что через IActiveScript интерфейсы это будет "немного правильнее", в моем понимании.
Ну через IActiveScript интерфейсы ты можешь весь интерпретатор VBScript (ну или JScript) подгрузить и исполнять скриптовый код на этих языках. Если тебе нужны только регулярочки, то достаточно только один VBScript.Regexp подгрузить, зачем тебе весь интерпретатор?
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх