powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / С++11 regex
25 сообщений из 47, страница 1 из 2
С++11 regex
    #38821826
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Играюсь понемногу с новым в С++11.
Пытаюсь задать регулярное выражение, "строка заканчивается на abc"

Код: plaintext
1.
2.
3.
string str = "ddd aaa abc";
regex r ("abc$");
cout << regex_search(str, r);



Но что-то не получается. Где можно посмотреть синтаксис регулярных выражений и что здесь не так?
...
Рейтинг: 0 / 0
С++11 regex
    #38821847
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaga,

Используй regex_match
...
Рейтинг: 0 / 0
С++11 regex
    #38821852
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZИспользуй regex_match
В данном случае нужен именно regex_search.
BagaBagaПытаюсь задать регулярное выражение, "строва заканчивается на abc"
Код: plaintext
1.
2.
3.
string str = "ddd aaa abc";
regex r ("abc$");
cout << regex_search(str, r);


Но что-то не получается.
Код правильный.
Должен вывести true(1).
Если вы ждете чего-то другого, то зря :)
...
Рейтинг: 0 / 0
С++11 regex
    #38821944
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечу всем. Должен вывести True. Выводит 0. Что есть False.

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

PS
В моём случае ерунда, как понимаю, из-за неполной реализации regex в gcc 4.8.3.
...
Рейтинг: 0 / 0
С++11 regex
    #38821956
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaga,

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

Реализовали в GCC 4.9
...
Рейтинг: 0 / 0
С++11 regex
    #38821957
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К счастью всегда есть Boost :)
...
Рейтинг: 0 / 0
С++11 regex
    #38821961
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что-то у меня тоже ничего не получается...
Linux, GCC...

Код: plaintext
1.
2.
3.
string str = "ddd aaa abc";
regex r ("abc$");
cout << regex_search(str, r);



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

На счёт search/match -- я бы использовал match и другой (естественно) regexp.
Код: plaintext
1.
regex r (".*abc$");
...
Рейтинг: 0 / 0
С++11 regex
    #38821963
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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 тоже люблю. Он работает...
...
Рейтинг: 0 / 0
С++11 regex
    #39074097
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В VS 2013 Express такой код
Код: plaintext
1.
2.
3.
	string str = "ddd aaa abc";
	regex r("abc$");
	printf("%i\n", regex_search(str, r));


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

А в стандарте дано каким алгоритмом происходит поиск ? В 28 разделе не встретил и не указана асимптотика (или я не заметил).
...
Рейтинг: 0 / 0
С++11 regex
    #39074146
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,
а разве стандарт должен это описывать?
...
Рейтинг: 0 / 0
С++11 regex
    #39074522
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы либо неудачные примеры находите либо никогда не оптимизируете.

У меня глядя на этот пример возникает мысль - OMG! Это решается проверкой length, substring и проверкой на равенство "==".
...
Рейтинг: 0 / 0
С++11 regex
    #39074576
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВ VS 2013 Express такой код
Код: plaintext
1.
2.
3.
	string str = "ddd aaa abc";
	regex r("abc$");
	printf("%i\n", regex_search(str, r));



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

А в стандарте дано каким алгоритмом происходит поиск ? В 28 разделе не встретил и не указана асимптотика (или я не заметил).
А что, бывают разные алгоритмы регулярок? Спасибо, не знал ))))
...
Рейтинг: 0 / 0
С++11 regex
    #39074579
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВы либо неудачные примеры находите либо никогда не оптимизируете.

У меня глядя на этот пример возникает мысль - OMG! Это решается проверкой length, substring и проверкой на равенство "==".
А это уже избыточная и преждевременная оптимизация.
...
Рейтинг: 0 / 0
С++11 regex
    #39074581
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryВ VS 2013 Express такой код
Код: plaintext
1.
2.
3.
	string str = "ddd aaa abc";
	regex r("abc$");
	printf("%i\n", regex_search(str, r));



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

А в стандарте дано каким алгоритмом происходит поиск ? В 28 разделе не встретил и не указана асимптотика (или я не заметил).
А что, бывают разные алгоритмы регулярок? Спасибо, не знал ))))

Есть разные реализации, их как минимум две. Классическая и перловая. Перловая требует память.
...
Рейтинг: 0 / 0
С++11 regex
    #39074585
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryвыводит истину.
MasterZivЕсть разные реализации, их как минимум две. Классическая и перловая. Перловая требует память.
Я думал, что речь про другие алгоритмы, которые могут дать другой результат ))

Так то оно понятно, что есть реализации разные, как минимум через DFA, NFA, и кривыми ручками )).
...
Рейтинг: 0 / 0
С++11 regex
    #39074703
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonВы либо неудачные примеры находите либо никогда не оптимизируете.

У меня глядя на этот пример возникает мысль - OMG! Это решается проверкой length, substring и проверкой на равенство "==".
А это уже избыточная и преждевременная оптимизация.
Ага.

Вот копипащу кусок проекта цена которого более чем шестизначная. И я такое вижу каждый день и много.
И вы думаете этот код писал чайничек? Нет. Куева туча сертифицированных синьоров-помидоров.
По рупам. По всем технологиями. По шаблонам и с полным циклом бизнес анализа. Только работает он медленно. И таких коде-блоков более пятисот.
Код: java
1.
2.
3.
4.
5.
6.
if (expr.matches("^[\\d]{9}$")
                            || expr.matches("^[\\d]{10}$")
                            || expr.matches("^[\\d]{12}$")) {
  ...

}


И никто не думал об оптимизациях. Тоже рассуждали ... дескыть преждевременно и т.д.
...
Рейтинг: 0 / 0
С++11 regex
    #39074745
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТолько работает он медленно.
Медленно, это понятие относительное.
Без контекста нет смысла обсуждать оптимизации и тем более их делать.
...
Рейтинг: 0 / 0
С++11 regex
    #39074868
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда... контекст это... это сила.
...
Рейтинг: 0 / 0
С++11 regex
    #39074871
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь показаться тупым (регулярных выражений не знаю), но спрошу, что значит expr.matches("^[\\d]{9}$") ?
...
Рейтинг: 0 / 0
С++11 regex
    #39074874
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TБоюсь показаться тупым (регулярных выражений не знаю), но спрошу, что значит expr.matches("^[\\d]{9}$") ?Зависит от реализации. Но скорее всего это вернет true если строка состоит из девяти цифр.
А на V7 это вернет true если строка состоит из девяти букв 'd' или '\'.
...
Рейтинг: 0 / 0
С++11 regex
    #39074880
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА на V7 это вернет true если строка состоит из девяти букв 'd' или '\'.
Там что убрали поддержку класса \d ?
Сильно сомневаюсь.
...
Рейтинг: 0 / 0
С++11 regex
    #39074887
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЗависит от реализации. Но скорее всего это вернет true если строка состоит из девяти цифр.
Тогда понятно негодование mayton`а. Такое бывает когда каждый пишет свой кусок не задумываясь о целом. Ошибки проектирования. Никто изначально не сказал что могут быть только цифры, поэтому максимальная проверка. mayton, синьоры-помидоры успешно сдали свою работу. Просто цель у них была сдать работу, а не что-то другое.
...
Рейтинг: 0 / 0
С++11 regex
    #39074889
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlА на V7 это вернет true если строка состоит из девяти букв 'd' или '\'.
Там что убрали поддержку класса \d ?
Сильно сомневаюсь.
Просто White Owl совершил, наверное, самую типичную ошибку при написании регулярок: то ли двойных кавычек не заметил, то ли просто интуитивно решил, что там сначала идёт \, а уже потом \d. :) Я так частенько, почему-то именно с регулярными выражениями ошибаюсь.
...
Рейтинг: 0 / 0
С++11 regex
    #39074890
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlА на V7 это вернет true если строка состоит из девяти букв 'd' или '\'.
Там что убрали поддержку класса \d ?
Сильно сомневаюсь.Неа, не убирали, а не вводили, не успели потому что :) В V7 были классы :digit:, :alpha: и так далее.
Потом в свободном доступе появилась библиотека pcre и posix, да и все остальные отстающие системы, быстренько подтянулись до современности.
Зато в обиход вошло (и некоторое время существовало) определение "shorthand character classes" как раз для всяких \d и \w. Впрочем, этот термин я уже лет десять не слышал.
...
Рейтинг: 0 / 0
С++11 regex
    #39074892
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAnatoly Moskovskyпропущено...

А это уже избыточная и преждевременная оптимизация.
Ага.

Вот копипащу кусок проекта цена которого более чем шестизначная. И я такое вижу каждый день и много.
И вы думаете этот код писал чайничек? Нет. Куева туча сертифицированных синьоров-помидоров.
По рупам. По всем технологиями. По шаблонам и с полным циклом бизнес анализа. Только работает он медленно. И таких коде-блоков более пятисот.
Код: java
1.
2.
3.
4.
5.
6.
if (expr.matches("^[\\d]{9}$")
                            || expr.matches("^[\\d]{10}$")
                            || expr.matches("^[\\d]{12}$")) {
  ...

}


И никто не думал об оптимизациях. Тоже рассуждали ... дескыть преждевременно и т.д.
А как нужно было сделать? Так или отказаться от регулярок?
Код: java
1.
2.
3.
4.
if (expr.matches("^\\d{9, 10}\\d{2}?$"){
  ...

}


Сорри протестировать не могу это выражение, но идея понятна должна быть.
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / С++11 regex
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]