boost::regex и бинарные данные
От: pf79 Украина  
Дата: 20.04.05 18:22
Оценка:
Хочу обрабатывать boost-овским regex-ом данные содержащие не только алфавитно-цифровые символы.
Пишу тестовый пример:
int _tmain(int argc, _TCHAR* argv[])
{
   char input[]="\0x01\0x00";
   char s1[]="(\\0x01)\0x00";
   boost::regex reg(s1);
   boost::match_results<const char*> what;
   if(0 == boost::regex_search(input, what, reg, boost::match_default | boost::match_partial))
       std::cout<<"NOT FOUND\n";
   else 
       std::cout<<"OK\n";
   getchar();
   return 0;
}

Регулярное выражение ничего не находит. Подскажите plz как настроить regex.
ЗЫ VC++ 7.1 boost 1.32
Re: boost::regex и бинарные данные
От: _cb_  
Дата: 21.04.05 06:30
Оценка:
Здравствуйте, pf79, Вы писали:

P>
P>int _tmain(int argc, _TCHAR* argv[])
P>{
P>   char input[]="\0x01\0x00";
P>   char s1[]="(\\0x01)\0x00";
P>}
P>


про boost::regexp ничего не скажу, но если мне не изменяет память то regexp-паттерн для указания произвольного кода символа выглядит вот так:

"\xNN" — где NN hex код символа

хотя может у boost-a своя нотация regexp-ов...

cb.
Re[2]: boost::regex и бинарные данные
От: pf79 Украина  
Дата: 21.04.05 06:40
Оценка:
Здравствуйте, _cb_, Вы писали:

__>про boost::regexp ничего не скажу, но если мне не изменяет память то regexp-паттерн для указания произвольного кода символа выглядит вот так:


__>"\xNN" — где NN hex код символа


__>cb.

И так тоже пробывал — болт
Re: boost::regex и бинарные данные
От: Pavel Chikulaev Россия  
Дата: 21.04.05 06:52
Оценка:
"pf79" <37257@users.rsdn.ru> wrote in message news:1134902@news.rsdn.ru...
>[snipped]

Ты вспомни строки char *, и чем они должны заканчиваться.
Если ты будет использовать std::string s(s1, s1 + 2); то у тебя наверно
получится.

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[2]: boost::regex и бинарные данные
От: pf79 Украина  
Дата: 21.04.05 07:15
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>"pf79" <37257@users.rsdn.ru> wrote in message news:1134902@news.rsdn.ru...

>>[snipped]

PC>Ты вспомни строки char *, и чем они должны заканчиваться.

PC>Если ты будет использовать std::string s(s1, s1 + 2); то у тебя наверно
PC>получится.

PC>--

PC>Pavel Chikulaev
Они у меня и заканчиваются чем надо — "\0x00"
Впрочем со stl-овских строк я начинал эксперементировать — результат тот же.
Re[3]: boost::regex и бинарные данные
От: Pavel Chikulaev Россия  
Дата: 21.04.05 07:19
Оценка:
"pf79" <37257@users.rsdn.ru> wrote in message news:1135438@news.rsdn.ru...
> Они у меня и заканчиваются чем надо — "\0x00"
> Впрочем со stl-овских строк я начинал эксперементировать — результат тот же.
>

у тебя два 0x00

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[4]: boost::regex и бинарные данные
От: pf79 Украина  
Дата: 21.04.05 07:36
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>у тебя два 0x00


PC>--

PC>Pavel Chikulaev
???????
char input[]="\0x01\0x00";
char s1[]="(\\0x01)\0x00";
По одному нулю в конце каждой строки
Ну да это неважно.
    std::string input("\0x07");
    std::string s1="(\\0x07)";
    boost::regex reg(s1);
    boost::match_results<std::string::const_iterator> what;
    if(0 == boost::regex_search(input, what, reg, boost::match_default | boost::match_partial))
        std::cout<<"NOT FOUND\n";
    else 
        std::cout<<"OK\n";

Результат тот же....
Re[5]: boost::regex и бинарные данные
От: Pavel Chikulaev Россия  
Дата: 21.04.05 07:39
Оценка:
"pf79" <37257@users.rsdn.ru> wrote in message news:1135495@news.rsdn.ru...
> По одному нулю в конце каждой строки
Сорри спутал [] c *


--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[5]: boost::regex и бинарные данные
От: Pavel Chikulaev Россия  
Дата: 21.04.05 07:41
Оценка:
"pf79" <37257@users.rsdn.ru> wrote in message news:1135495@news.rsdn.ru...
> Результат тот же....
Может спросить в gmane.comp.lib.boost.user ?

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re: boost::regex и бинарные данные
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.04.05 09:05
Оценка: 2 (1)
Здравствуйте, pf79, Вы писали:

P>Хочу обрабатывать boost-овским regex-ом данные содержащие не только алфавитно-цифровые символы.

P>Пишу тестовый пример:
P>
P>int _tmain(int argc, _TCHAR* argv[])
P>{
P>   char input[]="\0x01\0x00";
P>   char s1[]="(\\0x01)\0x00";
P>   boost::regex reg(s1);
P>   boost::match_results<const char*> what;
P>   if(0 == boost::regex_search(input, what, reg, boost::match_default | boost::match_partial))
P>       std::cout<<"NOT FOUND\n";
P>   else 
P>       std::cout<<"OK\n";
P>   getchar();
P>   return 0;
P>}
P>


Никогда не пользовал boost::regex, но мне интересно, что такое "\0x01\0x00"? Как я понимаю, если нужно задать строку, которая содержит символы с кодами 01 и 00, то ее следует писать так: "\x01\x00".
... << RSDN@Home 1.1.4 beta 5 rev. 395>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: boost::regex и бинарные данные
От: Pavel Chikulaev Россия  
Дата: 21.04.05 09:10
Оценка: :))
"eao197" <31476@users.rsdn.ru> wrote in message news:1135771@news.rsdn.ru...
> Никогда не пользовал boost::regex, но мне интересно, что такое "\0x01\0x00"?
> Как я понимаю, если нужно задать строку, которая содержит символы с кодами 01
> и 00, то ее следует писать так: "\x01\x00".
Блин глазастый!! А я-то думаю что у него там не работает?

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[3]: boost::regex и бинарные данные
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.04.05 09:16
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>"eao197" <31476@users.rsdn.ru> wrote in message news:1135771@news.rsdn.ru...

>> Никогда не пользовал boost::regex, но мне интересно, что такое "\0x01\0x00"?
>> Как я понимаю, если нужно задать строку, которая содержит символы с кодами 01
>> и 00, то ее следует писать так: "\x01\x00".
PC>Блин глазастый!! А я-то думаю что у него там не работает?

Имхо, он бы все очень быстро нашел, если бы сделал простую отладочную печать:
int _tmain(int argc, _TCHAR* argv[])
{
   char input[]="\0x01\0x00";
   char s1[]="(\\0x01)\0x00";
   boost::regex reg(s1);
   boost::match_results<const char*> what;
   if(0 == boost::regex_search(input, what, reg, boost::match_default | boost::match_partial))
      std::cout << "'" << s1 << "' NOT FOUND in '" << input << "'\n";
   else 
       std::cout<<"OK\n";
   getchar();
   return 0;
}


Хотя нужно подождать, пока pf79 мое предположение проверит.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: boost::regex и бинарные данные
От: pf79 Украина  
Дата: 21.04.05 09:46
Оценка:
Здравствуйте, eao197, Вы писали:


E>Хотя нужно подождать, пока pf79 мое предположение проверит.


Полностью подтвержаю !
Нашел, только собрался написать, а тут уже все есть
Спасибо всем принимавшим участие!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.