Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mr. Hat
2 / 2 / 0
Регистрация: 17.02.2012
Сообщений: 68
#1

Регулярные выражения (regex) - C++

15.03.2013, 06:18. Просмотров 728. Ответов 1
Метки нет (Все метки)

Нужно извлечь строку из переменной класса smatch. Пробовал через преобразование string(smatch_var) и через потоки, и во всех способах оказывается задействована функция str(). Вот текст тестовой программы:

C++
1
2
3
4
5
6
7
8
9
#include <regex>
using namespace std;
 
int main() {
    smatch m;
    if(regex_search(string("asssdf"),m,regex("sss"))) {
        m.str(); //<------ ошибка
    }
}
Конкретно ошибка возникает в файле xutility:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class _RanIt> inline
    void _Debug_range2(_RanIt _First, _RanIt _Last,
        _Dbfile_t _File, _Dbline_t _Line,
        random_access_iterator_tag)
    { // test iterator pair for valid range, random-access iterators
    if (_First != _Last) //<---------------------------------------- ошибка
        { // check for non-null pointers, valid range
        _DEBUG_POINTER2(_First, _File, _Line);
        _DEBUG_POINTER2(_Last, _File, _Line);
        if (_Last < _First)
            _DEBUG_ERROR2("invalid iterator range", _File, _Line);
        }
    }
Здесь _First и _Last (тип string::const_iterator) имеют значения "sssdf" и "df" соответственно (значения появляются, если в MVS навести курсор на переменную; видимо, это строки, на которые ссылается указатель). Суть сообщения об ошибке: "Expression: string iterators incompatible". Конкретно (если залезть еще глубже) это появляется здесь (файл xstring):

C++
1
2
3
4
5
6
7
8
9
void _Compat(const _Myiter& _Right) const
    { // test for compatible iterator pair
    if (this->_Getcont() == 0
        || this->_Getcont() != _Right._Getcont())
        { // report error
        _DEBUG_ERROR("string iterators incompatible");
        _SCL_SECURE_INVALID_ARGUMENT;
        }
    }
В функцию _Getcont дебаггер заходит только один раз, так что скорее всего выполнено условие this->_Getcont() == 0. Проблема решается с использованием неявного преобразования в string и функции length():

C++
1
2
3
4
5
6
7
8
9
10
11
#include <regex>
#include <iostream>
using namespace std;
 
int main() {
    smatch m;
    string s="asssdf";
    if(regex_search(s,m,regex("sss"))) {
        cout << s.substr(s.find(m[0]),m[0].length()) << endl; // OK
    }
}
Причем во время преобразования используется та же функция str(), но в этот раз функция _Compat не выдает ошибку, хотя значения итераторов те же самые. Почему так происходит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 06:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Регулярные выражения (regex) (C++):

найти вхождения выражения в строке (regex) - C++
Как найти позицию вхождения выражения в строке?

Регулярные выражения - C++
Доброй ночи! Использую вот такой код void INITDIALOG(void* p){ char* bufer = new char; server.GetLocList(bufer); char * t =...

Регулярные выражения - C++
Привет помогите составить регулярное выражение, чтобы парсить такую строку: , , результатом должно быть: a hello world any ...

Регулярные выражения. - C++
Здравствуйте всем! Имеется массив строк. Надо написать программу с функцией реализующей выявления соответствия между шаблоном допустим...

Регулярные выражения - C++
Здравствуйте, Надо заменить в тексте номер телефона формата (012) 345-67-89 на +380 12 345 67 89. Помогите, пожалуйста, как должны...

[C++] Регулярные выражения - C++
Знаю что в стандарте С нет регулярных выражений. Хочу попробывать собрать простую функцию поиска по шаблону регулярных выражений. ...

1
KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
15.03.2013, 07:06 #2
Какой компиль? Говорят что в gcc 4.7 регексы ещё не доделаны(уточни). Под boost все работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2013, 07:06
Привет! Вот еще темы с ответами:

регулярные выражения - C++
прочитал статю http://www.opennet.ru/base/dev/pcre_cpp.txt.html про регулярные выражения в c++ неужели там мноо кода нужно писать? ...

С++ и регулярные выражения - C++
С++ и регулярные выражения - возможно ли ето? Какие есть библиотеки или что-то в етом роде?

Регулярные выражения с++ - C++
Пользователь должен ввести строки: фамилию(первая буква должна быть заглавной), дату рождения(по форме аа.аа.аааа), состояние здоровья(good...

Регулярные выражения - C++
Как записать строки у тегов &lt;c&gt;&lt;/c&gt; и &lt;v&gt;&lt;/v&gt;? &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt; &lt;worksheet...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru