Здравствуйте, подскажите алгоритмы аналогичные регулярным выражениям (поиск по маске, etc), только без подключения сторонних библиотек. Язык С++. Или в какую сторону смотреть. Где то тут был топик на похожую тематику но я не нашёл (( Спасибо за внимание!!
Сторонние библиотеки - не зло. Boost.Regex поможет решить задачу спокойно, без изобретения велосипеда.
Регулярки щас есть в новом стандарте. достаточно скачать десятую студию. и написать #include<regex> Смотря что нужно тс. как по мне то большинство задач можно решить и без регулярок. Обходились же древние люди без консервных ножей .
=) Спасибо Enigma, вот например найти слово по маске. Просто подключать к проекту лишние либы тяги нет. Вес программы увеличивается. Среда разработки VS6.0
Если пишешь не мальварь то на вес должно быть побоку, я думаю ты ценишь свое время если нет то вперед писать свою либу регэкспов.
Эта студия стандартам-то не удовлетворяет старым, чего уж о новых говорить с std::regex. Нет уверенности, что в ней даже boost соберется. Поставь новую студию, 2010 например, и потом на выбор либо boost::regex, либо std::regex (что одно и то же по сути). Для шестой могу посоветовать только pcre. Пиши тогда на Си, плюсы сами по себе оверхед большой дают при использовании даже стандартных библиотек.
=) Спасибо, тогда буду качать VS10. У меня проект весь на winapi, придётся либами разбавить. Посмотрим насколько ехе распухнет. На С не тянет, учить его надо, там же свои тонкости)))
Code: ////////////////////////////////////////////////////////////////////////// bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) { for(;*szMask;++szMask,++pData,++bMask) if(*szMask=='x' && *pData!=*bMask ) return false; return (*szMask) == NULL; } ////////////////////////////////////////////////////////////////////////// DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask) { for(DWORD i=0; i < dwLen; i++) if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) ) return (DWORD)(dwAddress+i); return 0; } ... ... if(rc = dwFindPattern((DWORD)baseaddress, (DWORD)datasize, (PBYTE)"\x8B\xCF\xE8\x33\x00\x00\x00\x83\xf8\01\x7C\x07", "xxxxxxxxxxxx")) ну ты понел
В винде есть доступные регулярные выражения через COM-интерфейс, точно помню, но не помню, через какой. Так что, пожалуй, можно и без либ обойтись, если найти. Если вспомню, напишу. UPD: Собственно, вот они: http://www.wasm.ru/article.php?article=comregexp В си/си++ несложно будет применить, и очень мало веса добавят к программе.
=) 2 sn0w и GRRRL Power Респект, как раз практически то что нужно, вектор для дальнейших изысканий получен. Спасибо всем за отзывчивость)