LINUX.ORG.RU

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

 ,


0

2

Добрый день, имеется следующий код(используются regex классы и функции из boost regex):

...
regex regexTest("([a-zA-Z0-9]{1,20})\n([a-zA-Z0-9]{1,20})");
cmatch rez; //typedef match_results<const char*> cmatch;
char data[] = "ABC123\nABC456";
regex_match(data, rez, regexTest);
...

Вот примеры получения совпадения, соответствующего первым скобкам:

...
string st1 = rez[1].str();
string st2 = *(rez.begin + 1);
...
Вопрос:
А можно ли как-то из получить результат в виде строки в стиле C, при этом не используя промежуточный string-объект?

★★★★★

Последнее исправление: rumgot (всего исправлений: 1)

Ответ на: комментарий от mix_mix

Допустим исходная строка:

char data[] = "qwe123abc456";
Также есть регулярное выражение:
regex regexTest("([a-z]{1,3})[0-9]+([a-z]{1,3})[0-9]+");
То rez[1].first будет указателем на первый символ подстроки «qwe», НО! при попытке скопировать данную подстроку в массив char с помощью функции strcpy, будет скопирована ВСЯ исходная строка, т.к. после подстроки «qwe» не будет символа '\0', соответственно копирование будет идти до данного символа в конце исходной строки.
Как быть?

rumgot ★★★★★
() автор топика
Ответ на: комментарий от rumgot

при попытке скопировать данную подстроку в массив char с помощью функции strcpy, будет скопирована ВСЯ исходная строка

strncpy(dst, rez[1].first, rez[1].length());
mix_mix ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.