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

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

15.03.2013, 06:18. Показов 2723. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru