Ошибка при поиске подстроки регулярным выражением

Рейтинг: 3Ответов: 1Опубликовано: 22.12.2014

Работаю в Visual Studio Express 2012.

Здесь можно скачать триальную версию: http://www.microsoft.com/ru-ru/download/details.aspx?id=34673

Написал функцию, которая успешно проверяет строку регулярным выражением и находит нужные подстроки, но когда функция получает остаток строки, в котором уже нет ничего, что бы подходило про выражение, я получаю ошибку:

Expression: string iterator not dereferencable

Вызов в данной ситуации получается такой:

std::smatch m;
std::regex rExp("[a-z][a-z0-9]*"); //имя переменной
strBuf = "*10.5)*51E-10";
std::regex_search (strBuf, m, rExp);

Соответственно, ошибка возникает после вызова regex_search. Причем, при вызове из тела программы всё выполняется успешно, но внутри функции с абсолютно аналогичными аргументами я получаю ошибку в этой строке:

while (std::regex_search (strBuf, m, rExp)){

Исходный код: http://pastebin.com/6Q3wJ6FD

Если std::regex не объявляется по переменной, можете убрать switch и писать напрямую:

std::regex rExp("[a-z][a-z0-9]*");

А в main оставить один вызов searchLexemes(input, i, 1, fout);

Ответы

▲ 1

Говоря законченный фрагмент, я имел в виду код вместе с исходными данными, который можно откомпилировать и увидеть ошибку
(без этого, по крайней мере нужен код, вызывающий searchLexemes() и устанавливающий ее аргументы).

Крайне желательно выложить не весь Ваш проект, а минимальную законченную часть, воспроизводящую ошибку.

Кстати, весьма вероятно, что работая над созданием такого фрагмента, Вы самостоятельно выявите ошибку.

Обновление

Да, не работает. Более того, у меня:

Linux avp-xub11 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8  19:35:44 UTC 2014 i686 i686 i686 GNU/Linux
g++.real (Ubuntu 4.8.2-19ubuntu1) 4.8.2
...
g++ tst.cpp -std=c++11 -g

валится на std::regex rExp(strBuf);, причем, независимо в main или внутри функции и даже пример из http://www.cplusplus.com/reference/regex/basic_regex/basic_regex/ не работает (валиться на первом же образце с [ ]).


Обычный (для Си) regcomp/regexec, естественно работает (как ему и положено).

Интересно, а у кого нибудь в крестах работает?