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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
#1

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

21.07.2014, 22:29. Просмотров 493. Ответов 8
Метки нет (Все метки)

Здравствуйте. Решил попробовать регулярные выражения в 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++
Доброй ночи! Использую вот такой код void INITDIALOG(void* p){ char* bufer = new char; server.GetLocList(bufer); char * t =...

Регулярные выражения с++ - C++
Пользователь должен ввести строки: фамилию(первая буква должна быть заглавной), дату рождения(по форме аа.аа.аааа), состояние здоровья(good...

Регулярные выражения. - C++
Здравствуйте всем! Имеется массив строк. Надо написать программу с функцией реализующей выявления соответствия между шаблоном допустим...

Регулярные выражения - C++
Можете подсказать что это значит? &quot;Max-Forwards*(\d{3,}|7)&quot; я без понятия что это и откуда это( Добавлено через 4 минуты я уже...

Регулярные выражения - C++
Как записать строки у тегов &lt;c&gt;&lt;/c&gt; и &lt;v&gt;&lt;/v&gt;? &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt; &lt;worksheet...

Регулярные выражения на C++ - C++
Здраствуйте, возникла необходимость использовать регурные выражения в Си++. Первое что пришло в голову переписать все на Qt например,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1429 / 766 / 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
1429 / 766 / 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!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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
1641 / 1269 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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     Регулярные выражения с игнорированием спецсимволов
Еще ссылки по теме:

Регулярные выражения - C++
Может кто нибудь подсказать реализацию регулярных выражений на С/С++?

Регулярные выражения - C++
Ребят, у меня тут проблемы. В файле input.txt есть строчки, в которых нужно найти вес, т.е., например, 221 kg, 45g и отправить их в аутпут....

Регулярные выражения - C++
Привет помогите составить регулярное выражение, чтобы парсить такую строку: , , результатом должно быть: a hello world any ...

регулярные выражения - C++
прочитал статю http://www.opennet.ru/base/dev/pcre_cpp.txt.html про регулярные выражения в c++ неужели там мноо кода нужно писать? ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru