Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 0
Регистрация: 17.02.2012
Сообщений: 68

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

15.03.2013, 06:18. Показов 2743. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2013, 06:18
Ответы с готовыми решениями:

Составление regex выражения
Здравствуйте) Нужна помощь из составлением regex выражения. Оно должно ловить все строки с айпи, например: 127 0 0 1 127 0 0 1...

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

Регулярные выражения
Пытаюсь составить регулярное выражение для поиска словосочетания: тип + имя переменной ...

1
 Аватар для KATbIK
86 / 81 / 28
Регистрация: 02.08.2011
Сообщений: 335
15.03.2013, 07:06
Какой компиль? Говорят что в gcc 4.7 регексы ещё не доделаны(уточни). Под boost все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2013, 07:06
Помогаю со студенческими работами здесь

Регулярные выражения в g++
Привет всем! этот пример взял из http://www.cplusplus.com/reference/regex/regex_search/ и скомпилировал g++ . #include &lt;iostream&gt; ...

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

Регулярные выражения
Составить регулярное выражение, пропускающее строки, содержащие хотя бы по разу каждую из трех первых букв вашей фамилии(Например, фамилия...

Регулярные выражения
Как записать строки у тегов &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...

Регулярные выражения
Как из этой строки вытянуть png с помощью регулярки, кроме png может быть другой тип, &quot;image/&quot; всегда неизменна HTTP/1.1...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru