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

Регулярные выражения с игнорированием спецсимволов - C++

Восстановить пароль Регистрация
 
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
21.07.2014, 22:29     Регулярные выражения с игнорированием спецсимволов #1
Здравствуйте. Решил попробовать регулярные выражения в Visual C++ 2010. Задача такая: пользователь вводит (считывается параметр) текст и его нужно преобразовать в регулярку с игнорированием всех спецсимволов. Использую стандартную библиотеку <regex>. Предположим что пользователь ввел: .txt, хотя в данном случае он сработает правильно, но если в исходной строке (l) вместо точки будет другой символ, сравнение пройдет успешно, но не верно
этот пример даст FALSE
C++
1
2
3
wstring l=L"dstyf.txt";
wregex r(L".*\Q.txt\E.*");
bool t=regex_match(l,r);
этот пример даст ошибку
C++
1
2
3
wstring l=L"dstyf.txt";
wregex r(L".*\\Q.txt\\E.*");
bool t=regex_match(l,r);
Вопрос: в C++ существуют выражения (спец символы) \Q \E, а то при попытке их использовать ничего не выходит. Или придется создавать функцию экранирующую каждый символ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2014, 22:29     Регулярные выражения с игнорированием спецсимволов
Посмотрите здесь:

C++ регулярные выражения
[C++] Регулярные выражения C++
Регулярные выражения C++
C++ Регулярные выражения на C++
C++ Регулярные выражения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.07.2014, 00:05     Регулярные выражения с игнорированием спецсимволов #2
Для этого есть Сырые строковые литералы
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
22.07.2014, 21:34  [ТС]     Регулярные выражения с игнорированием спецсимволов #3
Это для 2011, пишу на 2010. у него есть аналоги?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.07.2014, 22:06     Регулярные выражения с игнорированием спецсимволов #4
Других вариантов мне не известно. А что мешает обновить компилятор или IDE для поддержки С++11?
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
29.07.2014, 22:28  [ТС]     Регулярные выражения с игнорированием спецсимволов #5
На сколько-то забросил дело, но вернувшись сменил среду на VS Express 2013. Но видимо недопонял про сырые строковые литералы. В данном примере значение t=true, хотя ожидается false (тк точка должна быть в части строки l)
C++
1
2
3
4
wstring mask = LR"(.txt)";
wregex r(L".*" + mask + L".*");
wstring l=L"dstyf8txt";
bool t=regex_match(l,r);
подскажите на данном примере как добится чтоб результатом был false, а при смене строки l=L"4tge.txt" результат стал true
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.07.2014, 22:42     Регулярные выражения с игнорированием спецсимволов #6
ems2811,
C++
1
wstring mask = LR"(\.txt)";
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
29.07.2014, 23:16  [ТС]     Регулярные выражения с игнорированием спецсимволов #7
тут идея в том чтобы полностью экранировать все символы в mask. Для примера выше даже сырые строковые литералы не нужны. А как сделать через них дабы не экранировать каждый символ. Только из-за них перешёл на 2013
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
30.07.2014, 00:02     Регулярные выражения с игнорированием спецсимволов #8
boost::regex нормально отрабатывает, а вот <regex> из vs2012 бросает ошибку на символы \\Q\\E. Вот рабочий пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <boost/regex.hpp>
 
int main()
{
    std::wstring sreg;
    std::getline(std::wcin, sreg);
    sreg = L"\\Q" + sreg + L"\\E";
    boost::wregex reg(L".*" + sreg + L".*");
    std::wstring str(L"vbvb8txt");
    std::cout << boost::regex_match(str, reg) << '\n';
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2014, 09:08     Регулярные выражения с игнорированием спецсимволов
Еще ссылки по теме:

Регулярные выражения в g++ C++
Регулярные выражения C++
C++ Регулярные выражения

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

Или воспользуйтесь поиском по форуму:
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
30.07.2014, 09:08  [ТС]     Регулярные выражения с игнорированием спецсимволов #9
Так сейчас среда то VS 2013. Можно ли обойтись без установки boost?
Yandex
Объявления
30.07.2014, 09:08     Регулярные выражения с игнорированием спецсимволов
Ответ Создать тему
Опции темы

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