С++11 regex

BagaBaga
Дата: 01.12.2014 19:24:03
Играюсь понемногу с новым в С++11.
Пытаюсь задать регулярное выражение, "строка заканчивается на abc"

string str = "ddd aaa abc";
regex r ("abc$");
cout << regex_search(str, r);


Но что-то не получается. Где можно посмотреть синтаксис регулярных выражений и что здесь не так?
NekZ
Дата: 01.12.2014 19:40:39
BagaBaga,

Используй regex_match
Anatoly Moskovsky
Дата: 01.12.2014 19:49:24
NekZ
Используй regex_match

В данном случае нужен именно regex_search.
BagaBaga
Пытаюсь задать регулярное выражение, "строва заканчивается на abc"
string str = "ddd aaa abc";
regex r ("abc$");
cout << regex_search(str, r);

Но что-то не получается.

Код правильный.
Должен вывести true(1).
Если вы ждете чего-то другого, то зря :)
BagaBaga
Дата: 01.12.2014 20:54:38
Отвечу всем. Должен вывести True. Выводит 0. Что есть False.

Похоже, что получилось как в том анекдоте:
Когда ты думаешь, что можешь решить проблему с помощью регулярных выражений,
ты получаешь две проблемы - исходную, и регулярные выражения :)

PS
В моём случае ерунда, как понимаю, из-за неполной реализации regex в gcc 4.8.3.
Anatoly Moskovsky
Дата: 01.12.2014 21:08:44
BagaBaga,

Судя по всему там не то что бы неполная реализация. Там просто заглушки :)
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631

Реализовали в GCC 4.9
Anatoly Moskovsky
Дата: 01.12.2014 21:09:29
К счастью всегда есть Boost :)
MasterZiv
Дата: 01.12.2014 21:12:06
А что-то у меня тоже ничего не получается...
Linux, GCC...

string str = "ddd aaa abc";
regex r ("abc$");
cout << regex_search(str, r);


-- это ноль выводит.

На счёт search/match -- я бы использовал match и другой (естественно) regexp.
regex r (".*abc$");
MasterZiv
Дата: 01.12.2014 21:14:15

ziv@mole:~/w/afs/trunk/matlab/afsstudy-debug$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

Да, я буст regex тоже люблю. Он работает...
SashaMercury
Дата: 12.10.2015 03:05:14
В VS 2013 Express такой код
	string str = "ddd aaa abc";
	regex r("abc$");
	printf("%i\n", regex_search(str, r));

выводит истину.

А в стандарте дано каким алгоритмом происходит поиск ? В 28 разделе не встретил и не указана асимптотика (или я не заметил).
BagaBaga
Дата: 12.10.2015 08:51:17
SashaMercury,
а разве стандарт должен это описывать?