powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Регулярные выражения в C++ Builder
8 сообщений из 8, страница 1 из 1
Регулярные выражения в C++ Builder
    #34048620
S.Q.Lapp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в следующем. Необходимо получить не подстроку поиска, задаваемую регулярным выражением, а данные, обозначенные в рег. выраженнии скобками (). Выражения примерно следующего вида:
[\\\\d.]{6,},([\\\\d.]{6,}),[NS],([\\\\d.]{6,}),[EW],[\\\\d.]{1,},[\\\\d.]{1,},([\\\\d.]{1,}),[\\\\d.]{1,}

На данный момент использую <pcreposix.h> с оберткой от Lepsik (/topic/79578&hl=foreign). Может кто-то подскажет как быть. Особенно надеюсь на комментарй г-на Lepsik.
P.S. C++ Builder из BDS 2006
P.P.S. Были неудачные попытки прикрутить boost.regex и greta.
...
Рейтинг: 0 / 0
Регулярные выражения в C++ Builder
    #34048626
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какие данные ?
вы бы пример дали бы .
что есть и что нужно ... :)
...
Рейтинг: 0 / 0
Регулярные выражения в C++ Builder
    #34048645
S.Q.Lapp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем случае есть некие текстовые файлы с определенными данными, но заранее неизвестным форматом. Часть этих данных нужно извлечь, что я бы хотел сделать, описывая регулярным выражением формат. Конкретно для приведенного выражения строка выглядит примерно след. образом:
$GPGGA,004241.47,5532.8492,N,03729.0987,E,1,04,2.0,-0015,M,,,,*31
А получить мне нужно
47,5532.8492
03729.0987
-0015
...
Рейтинг: 0 / 0
Регулярные выражения в C++ Builder
    #34048652
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно банально загрузить в массив и пробежаться.
откидывая не нжные символы ...
...
Рейтинг: 0 / 0
Регулярные выражения в C++ Builder
    #34048659
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.Q.LappНеобходимо получить не подстроку поиска, задаваемую регулярным выражением, а данные, обозначенные в рег. выраженнии скобками ().если мне память не изменяет, гляньте конструкцию вида \1

согласен с JibSkeart, наверное, проще и надежнее будет пробежаться циклом по строке...
...
Рейтинг: 0 / 0
Регулярные выражения в C++ Builder
    #34048678
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.Q.LappКонкретно для приведенного выражения строка выглядит примерно след. образом:
$GPGGA,004241.47,5532.8492,N,03729.0987,E,1,04,2.0,-0015,M,,,,*31
А получить мне нужно
47,5532.8492
03729.0987
-0015
Приведеное выражение, для этой строки никогда не выдаст показаные результаты.

А вообще там все элементарно:
Код: plaintext
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.
#include <stdio.h>
#include <pcreposi.h>
#include <string.h>

void main() {
	regex_t re;
	regmatch_t substrings[ 10 ];
	char sBuff[ 20 ], *regexpString, *testString;
	int i;

	regexpString = "[\\d.]{6,},([\\d.]{6,}),[NS],([\\d.]{6,}),[EW],[\\d.]{1,},[\\d.]{1,},([\\d.]{1,}),[\\d.]{1,}";
	testString =  "1234567,7654321,S,876654321,E,1,2,3,4";

	i = regcomp(&re, regexpString,  0 );
	printf("regcomp result: %d\n", i);
	i = regexec(&re, testString, sizeof(substrings)/sizeof(substrings[ 0 ]), substrings,  0 );
	printf("regexec result: %d\n", i);

	for(i= 1 ; i<=re.re_nsub; i++) {
		memcpy(sBuff, &testString[substrings[i].rm_so], substrings[i].rm_eo - substrings[i].rm_so);
		sBuff[substrings[i].rm_eo - substrings[i].rm_so] =  0 ;
		printf("substring %d: offsets:%d-%d value: %s\n", i, substrings[i].rm_so, substrings[i].rm_eo, sBuff);
	}

	regfree(&re);
}
...
Рейтинг: 0 / 0
Регулярные выражения в C++ Builder
    #34049185
S.Q.Lapp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JibSkeartможно банально загрузить в массив и пробежаться.
откидывая не нжные символы ...
Не можно. Я же написал, формат заранее не известен. Будет задаваться в настройках.

White Owl
Приведеное выражение, для этой строки никогда не выдаст показаные результаты.

Да я в курсе, строки для примера. Спасибо за пример, буду ковырять.

P.S. Если кто поделится ссылкой на мануал (не по регам, а по конкретным ф-циям), буду признателен.
...
Рейтинг: 0 / 0
Регулярные выражения в C++ Builder
    #34051569
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.Q.LappЕсли кто поделится ссылкой на мануал (не по регам, а по конкретным ф-циям), буду признателен.
Загружаешь свой линукс, и даешь команды:
man regcomp
man regexec
man regfree

Если линукса нету сходи сюда:
http://www.mkssoftware.com/docs/man3/regcomp.3.asp
http://www.mkssoftware.com/docs/man3/regexec.3.asp
http://www.mkssoftware.com/docs/man3/regfree.3.asp
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Регулярные выражения в C++ Builder
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]