2016-01-27 4 views
-1

У меня возникают проблемы с небольшим регулярным выражением, которое соответствует символу одного канала. Я всегда получаю исключение regex_error с кодом error_escape.C++ std :: regex litteral pipe error_escape exception

В это самая основной форме, побег на трубе не работает в POSIX, расширенный POSIX или стандартных режимы синтаксиса

std::regex("\\|", std::regex_constants::extended); 

Я попробовал все 3 режима с 2 обратных косыми чертами, только один, и никто.

Я даже пытался соответствовать, используя побег для фактического значения символа трубы:

\\0x7c or \0x7c 

С таким же результатом.

Что я делаю неправильно? Все остальные регулярные выражения в моем коде работают, в том числе несколько похожих буквенных символов (+, * и т. Д.).

(Пожалуйста, не предлагают повышение)

+0

Что заставляет вас поверить, что это не работает? Или более точно, что вы подразумеваете под словом «это не работает»? http://coliru.stacked-crooked.com/a/a0b6198080ecdcc5 – rici

+0

Простите, я как-то забыл добавить это! Я обновил описание, за исключением того, что получаю – rscarson

+0

, моя попытка воспроизвести проблему не удалась (см. Ссылку в предыдущем комментарии). Какой компилятор/стандартная библиотека вы используете? И какие версии? – rici

ответ

1

Самая ранняя версия GNU libstdC++, который поддерживает std::regex является v4.9.0, так что если вы используете libstdC++ v4.8, вы собираетесь найти много ошибок в регулярном выражении реализация. К сожалению, он был выпущен с частичной и вообще непригодной для использования реализацией, но сейчас это вода под мостом.

(Для записи, вот implementation status из документации v4.8.3. Несмотря на то, что документ говорит «Эта страница описывает C++ поддержки в магистральном GCC SVN, а не в какой-либо конкретной версии», то есть, AFAIK, фактический отчет о том, что было доступно в тот момент времени, однако единственный намек в самом URL-адресе. release notes for v4.9 список std::regex как новый.)

Извините, что я не использую MinGW, и я никогда не собираюсь этого делать, поэтому я не могу сказать, существует ли правдоподобное обходное решение. По-видимому, std::regex отлично работает в стандартной библиотечной реализации Windows C++ (что-то еще, что я никогда не использую). И, конечно же, всегда есть импульс, но, похоже, это выходит за рамки этого вопроса :)

+0

Позор, это последняя версия minGW. – rscarson

+0

Я сейчас работаю в среде linux, но мне нужна совместимость с платформами Windows, поэтому minGW – rscarson

+0

@rscarson: Согласно комментариям здесь - http://stackoverflow.com/questions/33823969/regex-error-escape -while-parsing-escape-characters-using-mingw - вы можете использовать 64-битное соединение и, следовательно, иметь v5.2 – rici

Смежные вопросы