Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2012, 14:27   #1
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию регуляр

Приветствую!
Есть код
Код:
#include <regex.h>
#include <string.h>
#include <dlfcn.h>
#include <stdio.h>

int ext(const void *r) {
regex_t regex;
int reti;
regmatch_t pmatch[1];
reti = regcomp(&regex, "AAA /(.*) BBB", REG_EXTENDED);
reti = regexec(&regex, r, 1, pmatch, 0);

if (!reti) {

char *match = strndup(r + pmatch[0].rm_so, pmatch[0].rm_eo - pmatch[0].rm_so);

printf("%s\n",match);
} else if (reti == REG_NOMATCH) 
return -1;

regfree(&regex);

    return 0;
}
int main()
{
ext("dsadasAAA /data_to_extract BBBfdsfdsfds");	
}
если выполнить, результат будет
Код:
AAA /data_to_extract BBB
а мне надо получить
Код:
/data_to_extract
прошу помочь
frommars вне форума Ответить с цитированием
Старый 01.10.2012, 19:40   #2
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

как я понимаю единственный вариант это искать вхождение в строку, а потом strncpy(buf, match+вхождение, strlen(match)-длина_того_что_надо_убрать)?
frommars вне форума Ответить с цитированием
Старый 01.10.2012, 19:45   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Попробуй "AAA (/(.*)) BBB". Думаю, в таком случае в pmatch[1] будет то, что во внешних скобках.
Somebody вне форума Ответить с цитированием
Старый 01.10.2012, 20:55   #4
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Попробуй "AAA (/(.*)) BBB". Думаю, в таком случае в pmatch[1] будет то, что во внешних скобках.
если просто заменить регуляр - результат такой же как и был, а вот если выводить pmatch, то результат �, 
frommars вне форума Ответить с цитированием
Старый 02.10.2012, 09:09   #5
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

всем спасибо, впорос решён.
frommars вне форума Ответить с цитированием
Старый 02.10.2012, 12:53   #6
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Как решен, не скажешь? Интересно...
Никто

мой блог
three_cats вне форума Ответить с цитированием
Старый 03.10.2012, 14:09   #7
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

Цитата:
Сообщение от three_cats Посмотреть сообщение
Как решен, не скажешь? Интересно...
заменил
Код:
char *match = strndup(r + pmatch[0].rm_so, pmatch[0].rm_eo - pmatch[0].rm_so);
на
Код:
match = strndup(r + pmatch[0].rm_so+4/*кол-во символов которые надо убрать сначала*/, pmatch[0].rm_eo - pmatch[0].rm_so - 8/*кол-во символов которые надо убрать сначала + кол-во символов которые надо убрать в конце*/);
frommars вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прошу объяснить почему не работает регуляр frommars PHP 2 07.05.2012 11:12
регуляр frommars PHP 3 01.11.2011 11:31