регулярные выражения

Тема в разделе "LANGS.C", создана пользователем agent007, 4 мар 2007.

  1. agent007

    agent007 New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2007
    Сообщения:
    166
    Не подскажите есть ли какая нибудь компактная либа для использования регулярных выражений? Встрачал какуюто.... но там стока кодеса, жуть.
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    #include <atlrx.h>
    CAtlRegExp<> re;
    CAtlREMatchContext<> mc;
    re.Parse(<ваша реклама здесь>, 0);
    if(re.Match(lpCmdLine, &mc))
    ...
     
  4. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    PCRE - Perl Compatible Regular Expressions

    Написана на чистом, кошерном Си. Если лень самому компилировать, то можно найти уже скомпилированные версии библиотеки. Легко юзабельна из-под ассемблера и вообще любых языков, которые понимают си-конвенцию.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Nouzui
    Надо же, не знал, что они есть в atl.
    Самая маленькая реализация, что я встречал - это где-то у МС, облегчённая версия, сорец на си в районе 70 кб. Также в сорцах винды есть regexp от vi - 45 кб. А самая распространённая из полноценных - 100 кб одним файлом, но сейчас не вспомню, чьё оно.
     
  6. agent007

    agent007 New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2007
    Сообщения:
    166
    блин, все не то :dntknw: большое ужасно... в общем долго копал в стороку VBScript.RegExp. получился такой код:
    Код (Text):
    1. #define _WIN32_WINNT 0x0400
    2. #include <windows.h>
    3. #include <stdio.h>
    4. #include <objbase.h>
    5.  
    6. #import "vbscript-regexp.tlb"
    7. using namespace VBScript_RegExp_55;
    8.  
    9. void main() {
    10.     CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
    11.     IRegExpPtr spRegExp(L"VBScript.RegExp");
    12.     spRegExp->Global = _variant_t(true);
    13.     spRegExp->Pattern = _bstr_t("^{(+|-)?}{\\d?\\d?\\d?}{((.|,)\\d\\d?\\d?)?}$");
    14.     IMatchCollectionPtr spMatches;
    15.     spMatches = spRegExp->Execute(_bstr_t("+123.21"));
    16.     IMatchPtr spMatch;
    17.     for (int i=0;i<spMatches->Count;i++) {
    18.         spMatch = spMatches->Item[i];
    19.         printf("\tMatch %d at %d: %s\n",i, spMatch->FirstIndex, (PSTR)spMatch->Value);
    20.     }
    21.     CoUninitialize();
    22. }
    но блин местами падает, когда pattern задаешь какойнить другой...
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    эх, блин.. ничего так у вас сорцы ))