Регулярные выражения
От: Irokez  
Дата: 19.01.05 10:01
Оценка:
Может знает кто-нибудь простую библиотеку или класс для работы с регулярными выражениями.
Нужна не сложная и не большая, к примеру для разбоа следующего выражения

250 ok reply <unknown@mail.com>
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re: Регулярные выражения
От: MaximE Великобритания  
Дата: 19.01.05 10:23
Оценка:
Irokez wrote:

> Может знает кто-нибудь простую библиотеку или класс для работы с регулярными выражениями.

> Нужна не сложная и не большая, к примеру для разбоа следующего выражения
>
> 250 ok reply <unknown@mail.com>

Можешь воспользоваться boost::regex. http://www.boost.org/libs/regex/doc/index.html

Если приложение только под POSIX, то можно использовать стандартные посиксные регулярные выражения. man regex.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[2]: Регулярные выражения
От: Irokez  
Дата: 19.01.05 10:29
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Irokez wrote:


>> Может знает кто-нибудь простую библиотеку или класс для работы с регулярными выражениями.

>> Нужна не сложная и не большая, к примеру для разбоа следующего выражения
>>
>> 250 ok reply <unknown@mail.com>

ME>Можешь воспользоваться boost::regex. http://www.boost.org/libs/regex/doc/index.html


ME>Если приложение только под POSIX, то можно использовать стандартные посиксные регулярные выражения. man regex.


ME>--

ME>Maxim Yegorushkin

Тяжеловестно, весь буст цеплять ради одного regex. Если б просто один класс.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re: Регулярные выражения
От: Onorin Нигерия  
Дата: 19.01.05 10:33
Оценка:
Здравствуйте, Irokez, Вы писали:

I>Может знает кто-нибудь простую библиотеку или класс для работы с регулярными выражениями.

I>Нужна не сложная и не большая, к примеру для разбоа следующего выражения

На Codeproject есть несколько пример по этому поводу.
http://www.codeproject.com/string/#Regular+Expressions,
В частности: http://www.codeproject.com/string/spencerregexp.asp
Re: Регулярные выражения
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.05 10:36
Оценка:
Здравствуйте, Irokez

Поищи по google PCRE -- маленькая, мощная, щустрая.
Для нее есть C++ обертки, я использую pcre++
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Регулярные выражения
От: Left2 Украина  
Дата: 19.01.05 11:14
Оценка:
I>250 ok reply <unknown@mail.com>

Для такой строчки вполне хватит и ATL-евских regexp-ов
Re[2]: Регулярные выражения
От: Irokez  
Дата: 19.01.05 11:23
Оценка:
Здравствуйте, Left2, Вы писали:

I>>250 ok reply <unknown@mail.com>


L>Для такой строчки вполне хватит и ATL-евских regexp-ов


Это самая простая сторочка.

Вот для такой она подойдет?

DATA
354 ok, send it; end with <CRLF>.<CRLF>
Message-ID: <004d01c4fd64$7dbe58c0$3301a8c0@Irokez>
From: "Andrei Yakubouski" <Irokez@masnet.com>
To: "Andrei Yakubouski" <irokez@localhost>,
<irokez@masnet.com>
Cc: <irokez@masnet.com>,
"Andrei Yakubouski" <irokez@localhost>
Subject: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Date: Tue, 18 Jan 2005 15:49:09 +0200
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0048_01C4FD75.3FC60700"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2180
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180

This is a multi-part message in MIME format.

------=_NextPart_000_0048_01C4FD75.3FC60700
Content-Type: text/plain;
charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccccccccccc

------=_NextPart_000_0048_01C4FD75.3FC60700
Content-Type: text/html;
charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dkoi8-r">
<META content=3D"MSHTML 6.00.2900.2523" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial =
size=3D2>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</FONT></DIV>
<DIV><FONT face=3DArial =
size=3D2>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</FONT></DIV>
<DIV><FONT face=3DArial =
size=3D2>cccccccccccccccccccccccccccccccccc</FONT></DIV>
<DIV>&nbsp;</DIV></BODY></HTML>

------=_NextPart_000_0048_01C4FD75.3FC60700--

.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re[2]: Регулярные выражения
От: Irokez  
Дата: 19.01.05 11:23
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Irokez


E>Поищи по google PCRE -- маленькая, мощная, щустрая.

E>Для нее есть C++ обертки, я использую pcre++

Чет скачал ее и pcre но не компилируется, файлов не хватает chartables.c
наверное эт еще не все думаю еще чего нет.
А есть ли уже нормальный обертки для pcre? Ну чтоб ращ и все работало.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re[3]: Регулярные выражения
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.05 11:47
Оценка:
Здравствуйте, Irokez, Вы писали:

I>Чет скачал ее и pcre но не компилируется, файлов не хватает chartables.c

I>наверное эт еще не все думаю еще чего нет.
I>А есть ли уже нормальный обертки для pcre? Ну чтоб ращ и все работало.

Как раз с pcre++ под Visula C++ и GNU C++ проблем не было.

Вот этот файл (он строится автоматически, там есть файл maketable.c, который этим занимается. Когда pcre устанавливается под unix через autoconf все делается без ручного вмешательства):

/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* This file is automatically written by the dftables auxiliary 
program. If you edit it by hand, you might like to edit the Makefile to 
prevent its ever being regenerated.

This file is #included in the compilation of pcre.c to build the default
character tables which are used when no tables are passed to the compile
function. */

static unsigned char pcre_default_tables[] = {

/* This table is a lower casing table. */

    0,  1,  2,  3,  4,  5,  6,  7,
    8,  9, 10, 11, 12, 13, 14, 15,
   16, 17, 18, 19, 20, 21, 22, 23,
   24, 25, 26, 27, 28, 29, 30, 31,
   32, 33, 34, 35, 36, 37, 38, 39,
   40, 41, 42, 43, 44, 45, 46, 47,
   48, 49, 50, 51, 52, 53, 54, 55,
   56, 57, 58, 59, 60, 61, 62, 63,
   64, 97, 98, 99,100,101,102,103,
  104,105,106,107,108,109,110,111,
  112,113,114,115,116,117,118,119,
  120,121,122, 91, 92, 93, 94, 95,
   96, 97, 98, 99,100,101,102,103,
  104,105,106,107,108,109,110,111,
  112,113,114,115,116,117,118,119,
  120,121,122,123,124,125,126,127,
  128,129,130,131,132,133,134,135,
  136,137,138,139,140,141,142,143,
  144,145,146,147,148,149,150,151,
  152,153,154,155,156,157,158,159,
  160,161,162,163,164,165,166,167,
  168,169,170,171,172,173,174,175,
  176,177,178,179,180,181,182,183,
  184,185,186,187,188,189,190,191,
  192,193,194,195,196,197,198,199,
  200,201,202,203,204,205,206,207,
  208,209,210,211,212,213,214,215,
  216,217,218,219,220,221,222,223,
  224,225,226,227,228,229,230,231,
  232,233,234,235,236,237,238,239,
  240,241,242,243,244,245,246,247,
  248,249,250,251,252,253,254,255,

/* This table is a case flipping table. */

    0,  1,  2,  3,  4,  5,  6,  7,
    8,  9, 10, 11, 12, 13, 14, 15,
   16, 17, 18, 19, 20, 21, 22, 23,
   24, 25, 26, 27, 28, 29, 30, 31,
   32, 33, 34, 35, 36, 37, 38, 39,
   40, 41, 42, 43, 44, 45, 46, 47,
   48, 49, 50, 51, 52, 53, 54, 55,
   56, 57, 58, 59, 60, 61, 62, 63,
   64, 97, 98, 99,100,101,102,103,
  104,105,106,107,108,109,110,111,
  112,113,114,115,116,117,118,119,
  120,121,122, 91, 92, 93, 94, 95,
   96, 65, 66, 67, 68, 69, 70, 71,
   72, 73, 74, 75, 76, 77, 78, 79,
   80, 81, 82, 83, 84, 85, 86, 87,
   88, 89, 90,123,124,125,126,127,
  128,129,130,131,132,133,134,135,
  136,137,138,139,140,141,142,143,
  144,145,146,147,148,149,150,151,
  152,153,154,155,156,157,158,159,
  160,161,162,163,164,165,166,167,
  168,169,170,171,172,173,174,175,
  176,177,178,179,180,181,182,183,
  184,185,186,187,188,189,190,191,
  192,193,194,195,196,197,198,199,
  200,201,202,203,204,205,206,207,
  208,209,210,211,212,213,214,215,
  216,217,218,219,220,221,222,223,
  224,225,226,227,228,229,230,231,
  232,233,234,235,236,237,238,239,
  240,241,242,243,244,245,246,247,
  248,249,250,251,252,253,254,255,

/* This table contains bit maps for various character classes.
Each map is 32 bytes long and the bits run from the least
significant end of each byte. The classes that have their own
maps are: space, xdigit, digit, upper, lower, word, graph
print, punct, and cntrl. Other classes are built from combinations. */

  0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
  0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
  0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,
  0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/* This table identifies various classes of character by individual bits:
  0x01   white space character
  0x02   letter
  0x04   decimal digit
  0x08   hexadecimal digit
  0x10   alphanumeric or '_'
  0x80   regular expression metacharacter or binary zero
*/

  0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
  0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00, /*   8- 15 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
  0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /*    - '  */
  0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /*  ( - /  */
  0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */
  0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /*  8 - ?  */
  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  @ - G  */
  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  H - O  */
  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  P - W  */
  0x12,0x12,0x12,0x80,0x00,0x00,0x80,0x10, /*  X - _  */
  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  ` - g  */
  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  h - o  */
  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  p - w  */
  0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /*  x -127 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */

/* End of chartables.c */
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Регулярные выражения
От: Left2 Украина  
Дата: 19.01.05 11:49
Оценка: +1
Если ты пишешь SMTP-сервер (клиент?) — то посмотри в сторону ATL, ключевое слово ATL Server
Там есть классы для Base64/UUEncode
Насчёт парсинга Mime-контента — навскидку не скажу
Но парсинг Mime-контента с помощью регулярных выражений мне не кажется хорошей идеей
Re[3]: Регулярные выражения
От: Hawk Россия  
Дата: 20.01.05 03:50
Оценка: +1
Здравствуйте, Irokez, Вы писали:

I>Тяжеловестно, весь буст цеплять ради одного regex. Если б просто один класс.


AFAIK, весь Boost цеплять не надо. Boost — это не одна огромная монолитная библиотека (как MFC), а целый набор библиотек, которые могут подключаться независимо. Следовательно, можно ограничиться включением в свой проект только одной библиотеки — Boost.Regex.
Re[4]: Регулярные выражения
От: Irokez  
Дата: 20.01.05 07:04
Оценка:
Здравствуйте, Hawk, Вы писали:

H>Здравствуйте, Irokez, Вы писали:


I>>Тяжеловестно, весь буст цеплять ради одного regex. Если б просто один класс.


H>AFAIK, весь Boost цеплять не надо. Boost — это не одна огромная монолитная библиотека (как MFC), а целый набор библиотек, которые могут подключаться независимо. Следовательно, можно ограничиться включением в свой проект только одной библиотеки — Boost.Regex.


Спасибо гляну.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re[3]: Регулярные выражения
От: c-smile Канада http://terrainformatica.com
Дата: 20.01.05 07:47
Оценка:
Здравствуйте, Irokez, Вы писали:

MIME++ или аналогичная библиотека — их много всяких.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.