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

std::regex - всегда выдает "NO!" - C++

Восстановить пароль Регистрация
 
 
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.12.2013, 23:21     std::regex - всегда выдает "NO!" #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
#include <iostream>
#include <regex>
using namespace std;
int main() {
    string str("abc");
    setlocale(LC_CTYPE, "C");
    regex reg("abc", regex_constants::basic);
    smatch mat;
    if(regex_search(str.cbegin(), str.cend(), mat, reg))
        cout <<"YES!" << endl;
    else
        cout << "NO!" << endl;
 
    return EXIT_SUCCESS;
}
Почему мне всегда выдает NO! ?
Bash
1
2
3
cc --version
cc (GCC) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 23:21     std::regex - всегда выдает "NO!"
Посмотрите здесь:

C++ error C2040: key: "int [256]" отличается по уровням косвенного обращения от "std::ofstream"
error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::basic_istream<_Elem,_Traits>" C++
C++ Исправить ошибку:error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
C++ Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
C++ Error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
24.12.2013, 23:50     std::regex - всегда выдает "NO!" #2
У меня примеры с документации падают (:
http://en.cppreference.com/w/cpp/regex/regex_search
http://www.cplusplus.com/reference/regex/regex_search/
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
24.12.2013, 23:50     std::regex - всегда выдает "NO!" #3
Компилириется нормально, при запуске падет.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.12.2013, 23:50  [ТС]     std::regex - всегда выдает "NO!" #4
Цитата Сообщение от outoftime Посмотреть сообщение
У меня примеры с документации падают (:
У меня тоже. Но код в первом посте не должен выбивать эксепшн
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
24.12.2013, 23:54     std::regex - всегда выдает "NO!" #5
http://www.compileonline.com/compile_cpp11_online.php также падает на примерах (:

Добавлено через 59 секунд
Кода я использовал regexp с Qt все было нормально, попробую посмотреть в чем разница.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.12.2013, 00:00  [ТС]     std::regex - всегда выдает "NO!" #6
Цитата Сообщение от outoftime Посмотреть сообщение
http://www.compileonline.com/compile_cpp11_online.php также падает на примерах (:
Так там же GCC 4.7.2. Старый уже) Он только с 4.8.0 и позднее адекватно поддерживает 14882:2011

Добавлено через 2 минуты
Цитата Сообщение от outoftime Посмотреть сообщение
Кода я использовал regexp с Qt все было нормально, попробую посмотреть в чем разница.
C Qt (QRegExp) все нормально работает.
У меня просто функция, которая парсит входные данные и часто вызывается на строках, которые могут быть до нескольких гигабайт (sic!) величиной. Хотел большей производительности, чтобы не вмешивать Qt в эту чисто С/С++-ную функцию, а тут такая ****
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
25.12.2013, 00:05     std::regex - всегда выдает "NO!" #7
http://en.cppreference.com/w/cpp/reg...ax_option_type попробуй этот пример, у тебя также вывод пустой?

Добавлено через 1 минуту
Цитата Сообщение от gromo Посмотреть сообщение
Так там же GCC 4.7.2. Старый уже) Он только с 4.8.0 и позднее адекватно поддерживает 14882:2011
Прикол в том у меня на ноуте 4.8.1 стоит и падает с той же ошибкой.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.12.2013, 00:11  [ТС]     std::regex - всегда выдает "NO!" #8
Цитата Сообщение от outoftime Посмотреть сообщение
http://en.cppreference.com/w/cpp/reg...ax_option_type попробуй этот пример, у тебя также вывод пустой?
да((

Добавлено через 2 минуты
Что за бред такой, ждем 2014 года я так понял. Но курсовую здавать уже через несколько месяцев, так что не вариант. Что ж, буду Qt подмешивать, что поделаешь
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
25.12.2013, 00:27     std::regex - всегда выдает "NO!" #9
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52719
http://gcc.gnu.org/onlinedocs/libstd...tatus.iso.2011
На сколько я понял regex еще не поддерживается полностью.

28 Regular expressions
28.1 General N
28.2 Definitions N
28.3 Requirements N
28.4 Header <regex> synopsis N
28.5 Namespace std::regex_constants Y
28.6 Class regex_error Y
28.7 Class template regex_traits Partial
28.8 Class template basic_regex Partial
28.9 Class template sub_match Partial
28.10 Class template match_results Partial
28.11 Regular expression algorithms N
28.12 Regular expression Iterators N
28.13 Modified ECMAScript regular expression grammar N

Добавлено через 1 минуту
Ахаха, только заметил, они самое главное сделали: "28.6 Class regex_error Y" а остальное потом доделается (:

Добавлено через 1 минуту
Не знаешь, boost быстрее за QRegExp?

Добавлено через 6 минут
Судя по http://en.wikipedia.org/wiki/Compari...ession_engines Qt уступает boost. Один + поддержка UTF-16
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.12.2013, 00:39  [ТС]     std::regex - всегда выдает "NO!" #10
Цитата Сообщение от outoftime Посмотреть сообщение
На сколько я понял regex еще не поддерживается полностью.
таки да.

Не по теме:

Интересно, кто-нибудь поддерживает в полной мере с++11?



Добавлено через 2 минуты
Цитата Сообщение от outoftime Посмотреть сообщение
Ахаха, только заметил, они самое главное сделали: "28.6 Class regex_error Y" а остальное потом доделается (:
и пространство имен с константами тоже заделали

Добавлено через 8 минут
outoftime, а boost regex тянет за собой либу, или там достаточно хедер заинклудить?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
25.12.2013, 00:49     std::regex - всегда выдает "NO!" #11
https://blog.qt.digia.com/blog/2009/...-qtboostregex/ да, Qt совсем не вариант. По ходу boost остается.

Судя по тому что говорят люди надо протестировать производительность на разных примерах. Regexp вроде можно компилировать, тогда они реже выполняются. Я бы рыл в сторону boost-a.

Добавлено через 8 минут
По поводу c++11 & regex, я так понимаю это проблема с библиотекой а не компилятором. Просто я смотрел статус clang там вообще нету поддержки regex в lang features, с чего я сделал вывод что проблема в библиотеке. http://clang.llvm.org/cxx_status.html
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.12.2013, 00:52  [ТС]     std::regex - всегда выдает "NO!" #12
boost regex тянет за собой либу, или там достаточно хедер включить?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
25.12.2013, 00:56     std::regex - всегда выдает "NO!" #13
http://stackoverflow.com/questions/4...ost-in-windows вот обсуждение на стекоферфлоу, смотри пока модеры не удалили (:

Я с boost-ом не знаком, я пол часа на нем писал всего (: niXman довольно плотно с ней работал, отпиши ему, может поможет.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.12.2013, 00:59     std::regex - всегда выдает "NO!" #14
Надо либу подключать.

Добавлено через 1 минуту
И да, std::regex еще не допилен. Все пользуются boost

Добавлено через 1 минуту
std::regex походу в студии работает, - надо проверять.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.12.2013, 01:05  [ТС]     std::regex - всегда выдает "NO!" #15
outoftime,
The only Boost libraries that must be built separately are:

Boost.Chrono
Boost.Context
Boost.Filesystem
Boost.GraphParallel
Boost.IOStreams
Boost.Locale
Boost.MPI
Boost.ProgramOptions
Boost.Python (see the Boost.Python build documentation before building and installing it)
Boost.Regex
Boost.Serialization
Boost.Signals
Boost.System
Boost.Thread
Boost.Timer
Boost.Wave
Добавлено через 4 минуты
Цитата Сообщение от DiffEreD Посмотреть сообщение
std::regex походу в студии работает, - надо проверять.
Уж увольте)) Студию год как забыл. Для меня удобнее Qt Creator - уж лучше я с бустом повожусь
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
25.12.2013, 01:08     std::regex - всегда выдает "NO!" #16
Это же хорошо (:

Добавлено через 2 минуты
Цитата Сообщение от gromo Посмотреть сообщение
Для меня удобнее Qt Creator - уж лучше я с бустом повожусь
У меня с ним очень печальный опыт, я на нем ни дебажить не научился толком ни библиотеки подключать что-бы intellisense работал. Правда он удобней студии, без спору (:
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.12.2013, 01:14     std::regex - всегда выдает "NO!" #17
outoftime, библиотеки буста можно легко подключать таким образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
INCLUDEPATH +=  $(BOOST_ROOT) #BOOST_ROOT must be in Path
BOOST = $(BOOST_ROOT)
 
COMPILER_SHORT = mgw48
BOOST_VER = 1_55
 
CONFIG(debug, debug|release) {
BOOST_SUFFIX = $${COMPILER_SHORT}-mt-sd-$${BOOST_VER}
} else {
BOOST_SUFFIX = $${COMPILER_SHORT}-mt-s-$${BOOST_VER}
}
 
LIBS += -L$${BOOST}/stage/lib
 
#// now you can add your libraries, e.g.
LIBS += -lboost_system-$${BOOST_SUFFIX}
 
LIBS += -lboost_filesystem-$${BOOST_SUFFIX}
 
LIBS += -lboost_regex-$${BOOST_SUFFIX}
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.12.2013, 01:18  [ТС]     std::regex - всегда выдает "NO!" #18
Цитата Сообщение от outoftime Посмотреть сообщение
У меня с ним очень печальный опыт, я на нем ни дебажить не научился толком ни библиотеки подключать что-бы intellisense работал. Правда он удобней студии, без спору (:
А что насчет дебаггера? В чем проблема была?
Для навигации мне было достаточно включить только заголовочный файл и все идет.
Правда только некоторые вещи из С++11 не дополняет, например, std:: placeholders, явное указание возвращаемого значения лямбды подчеркивает как ошибку, еще что-то... Недавно даже тему создавал на этот счет, так и не решили(

Добавлено через 3 минуты
Цитата Сообщение от DiffEreD Посмотреть сообщение
библиотеки буста можно легко подключать таким образом
Цитата Сообщение от DiffEreD Посмотреть сообщение
LIBS += -L$${BOOST}/stage/lib
Одного INCLUDEPATH не достаточно?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.12.2013, 01:20     std::regex - всегда выдает "NO!" #19
INCLUDEPATH для заголовков, LIBS же для библиотек
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 01:26     std::regex - всегда выдает "NO!"
Еще ссылки по теме:

Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream" C++
Бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" C++
Error C2664: Client::First: невозможно преобразовать параметр 1 из "std::queue<_Ty>" в "std::queue<_Ty> &" C++

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

Или воспользуйтесь поиском по форуму:
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.12.2013, 01:26  [ТС]     std::regex - всегда выдает "NO!" #20
Цитата Сообщение от DiffEreD Посмотреть сообщение
INCLUDEPATH для заголовков, LIBS же для библиотек
что-то я совсем засиделся) надо проветриться
Yandex
Объявления
25.12.2013, 01:26     std::regex - всегда выдает "NO!"
Ответ Создать тему
Опции темы

Текущее время: 11:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru