Поиск по шаблону (regexp) в С++

Elina74

1. Возможен? Какие библиотеки за это отвечают?
К примеру, из строки типа
"DataColumn = 13 Energy = 17.7 - 27.9 GeomFactor = 0.03 DeltaT = 0.1"
надо вытянуть число после "GeomFactor".
Конечно, можно и так написать, руками, но не верится, что это еще не сделано до нас.
2. Есть ли такие библиотеки в Borland C++ Builder 4? (я типа искал, но не нашел)

williamsmith61

PCRE кажись. Глянь в инете.

Elina74

Угу... точно...

Maurog

sscanf(s, "DataColumn = %d Energy = %lf - %lf GeomFactor = %lf DeltaT = %lf", &datac, &e1, &e2, &GeomFactor, &Delta);

sergey_m

man 3 regex. Находится в библиотеке под названием libc, в ОС, которые пытаются соответствоватьPOSIX.2. А libpcre - альтернативный вариант, который не на всех системах присутствует.

Elina74

Судя по названию, этих библиотек в борланд с++ билдере нет и не будет.

Elina74

Круто. С этой библиотекой приятнее работать, чем с pcre.
Спасибо.

Elina74

TRegExpr
1. Скачать, распаковать архив
2. Скопировать RegExpr.pas, например, в директорию с будущим проектом
3. В билдере сделать Project->Add to project, добавить этот RegExpr.pas в проект
4. Выбрать его среди закладок в редакторе и скомпилировать этот юнит: Project->Compile unit
5. Сделать File->Include unit hdr и выбрать скомпилированный RegExpr
Начать писать. Например:
 
TRegExpr* R = new TRegExpr;
int i;
R->Expression = "Title\\s*=\\s*(\\S+)\\s+Energy\\s*=\\s*(\\d+)";
if(R->Exec("Title=trtrt Energy=123"{
do{
for(i=0; i<=R->SubExprMatchCount; i++){
Application->MessageBoxR->Match[i]).c_str "", MB_OK);
}
}while(R->ExecNext;
}
Оставить комментарий
Имя или ник:
Комментарий: