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

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

Войти
Регистрация
Восстановить пароль
 
Богдан Корниено
9 / 9 / 1
Регистрация: 24.03.2011
Сообщений: 152
#1

RegEx Первая обработка - C++

31.10.2011, 03:37. Просмотров 908. Ответов 8
Метки нет (Все метки)

Доброго времени суток. Начал изучать регулярные выражения. Но ничего не могу понять, как оно все работает. Пожалуйста, покажите на простом примере, как можно, например строку "образец !@#с разными$ %непонятными символами^&*()!\"№;%:?* строки" отпарсить, чтобы в ней были только буквы и пробелы?

Зарание, огромное спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 03:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос RegEx Первая обработка (C++):

std::regex и boost::regex - C++
Что-то я не пойму что реализация их различна ? #include <iostream> #include <string> //#include <regex> //using namespace...

regex - C++
как через регулярки подсчитать количество слов в стоке??? я пробовал так: #include <iterator> #include <iostream> #include <string>...

Regex в С++ - C++
Здравствуйте! Я хочу найти все вхождения подстроки типа 1+1 в строку. std::string str = "0011011000001"; std::regex rx ("1+1"); ...

Ошибки с Regex - C++
Доброго времени суток. Понадобилось немного поработать с регулярными выражениями, но почему-то в boost и стандартной TR1 возникают...

<regex> гайд - C++
Можно ссылку на нормальный урок/инструкцию по std::regex? Сам в интернете так ничего и не нашел, с регулярками знаком по python'у.

Regex в char - C++
можно ли конвертировать boost::regex в char*?

8
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.10.2011, 04:46 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
#include <regex>
 
int main()
{
    std::string str("its=+ a/. simple^ test@!& string");
    std::regex reg("[^a-zA-Z\\s]");
    str = std::regex_replace(str, reg, std::string(""));
    std::cout << str;
    return 0;
}
1
Богдан Корниено
9 / 9 / 1
Регистрация: 24.03.2011
Сообщений: 152
01.11.2011, 12:35  [ТС] #3
По чему-то во время выполнения приложения выплевывает следующее:

terminate called after throwing an instance of 'std::regex_error'
what() regex_error

Компелирую следующим образом:
g++ -std=c++0x -o test test.cpp
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.11.2011, 12:54 #4
Цитата Сообщение от Богдан Корниено Посмотреть сообщение
По чему-то во время выполнения приложения выплевывает следующее:
terminate called after throwing an instance of 'std::regex_error'
what() regex_error
и в правду выдает...странно, а в 10-й студии все тип-топ - отрабатывает
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
01.11.2011, 13:04 #5
Судя по статусу поддержки gcc, там оно еще не сделано. Видать пока вместо regex_replace стоит заглушка, которая при вызове кидает исключение
у меня (gcc 4.6.1) тоже не работает. Воспользуйся boost'ом
1
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.11.2011, 13:09 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
#include <boost/regex.hpp>
 
int main()
{
    std::string str("its=+ a/. simple^ test@!& string");
    boost::regex reg("[^a-zA-Z ]");
    str = boost::regex_replace(str, reg, std::string(""));
    std::cout << str;
    return 0;
}
http://liveworkspace.org/code/d908ea60823187ef976ad321392a36cd
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
01.11.2011, 13:11 #7
Цитата Сообщение от Nameless One Посмотреть сообщение
Воспользуйся boost'ом
Код
[nameless@desktop cpp]$ cat main.cc
#include <iostream>
#include <string>
#include <boost/regex.hpp>
#include <stdexcept>

int main()
{
    try
    {
	
	std::string str("its=+ a/ . &* simple^ ;test@!& string");
	boost::regex reg(R"([^\w\d]+)");
	std::string result = boost::regex_replace(str, reg, std::string(" "));
	std::cout << result << std::endl;
    }
    catch(std::exception& e)
    {
	std::cerr << e.what() << std::endl;
	return 1;
    }
    
    return 0;
}
[nameless@desktop cpp]$ make
g++ -c -Wall -g -std=c++0x  main.cc
g++ -o sample -lboost_regex main.o
[nameless@desktop cpp]$ ./sample 
its a simple test string
[nameless@desktop cpp]$
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
01.11.2011, 14:30 #8
Nameless One, В std регекс даже не конструируется. Так что там не на функции реплейса заглушка.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
01.11.2011, 14:48 #9
ForEveR, ну да, логично
0
01.11.2011, 14:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 14:48
Привет! Вот еще темы с ответами:

Группировка regex - C++
Доброго времени суток, форумчане! Возникла проблема. Допустим у нас есть строка s_ip:192.168.0.100. Регулярное выражение s_ip:(+) выводит...

Как разобраться с regex - C++
Всем привет. Использую regex_search и хочу, чтобы он не зависел от регистра. Нашел такую штуку, но не могу понять, как это сделать: ...

Std::regex не работает - C++
Здравствуйте, имеется регекс для следущего паттерна: &quot;слово пробел слово newline . Что-то вроде этого: регекс следующий: ...

<regex> выборка из массива - C++
Есть char массив размерности 128 со всяким барахлом, среди которого выражение &lt;begin&gt;11100100&lt;end&gt; Как бы мне содержимое 11100100 оттуда...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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