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

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

Восстановить пароль Регистрация
 
Богдан Корниено
 Аватар для Богдан Корниено
9 / 9 / 1
Регистрация: 24.03.2011
Сообщений: 152
31.10.2011, 03:37     RegEx Первая обработка #1
Доброго времени суток. Начал изучать регулярные выражения. Но ничего не могу понять, как оно все работает. Пожалуйста, покажите на простом примере, как можно, например строку "образец !@#с разными$ %непонятными символами^&*()!\"№;%:?* строки" отпарсить, чтобы в ней были только буквы и пробелы?

Зарание, огромное спасибо!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 03:37     RegEx Первая обработка
Посмотрите здесь:

C++ std::regex и boost::regex
C++ Регулярные выражения (regex)
C++ <regex> гайд
Regex в char C++
C++ regex
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.10.2011, 04:46     RegEx Первая обработка #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;
}
Богдан Корниено
 Аватар для Богдан Корниено
9 / 9 / 1
Регистрация: 24.03.2011
Сообщений: 152
01.11.2011, 12:35  [ТС]     RegEx Первая обработка #3
По чему-то во время выполнения приложения выплевывает следующее:

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

Компелирую следующим образом:
g++ -std=c++0x -o test test.cpp
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.11.2011, 12:54     RegEx Первая обработка #4
Цитата Сообщение от Богдан Корниено Посмотреть сообщение
По чему-то во время выполнения приложения выплевывает следующее:
terminate called after throwing an instance of 'std::regex_error'
what() regex_error
и в правду выдает...странно, а в 10-й студии все тип-топ - отрабатывает
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.11.2011, 13:04     RegEx Первая обработка #5
Судя по статусу поддержки gcc, там оно еще не сделано. Видать пока вместо regex_replace стоит заглушка, которая при вызове кидает исключение
у меня (gcc 4.6.1) тоже не работает. Воспользуйся boost'ом
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.11.2011, 13:09     RegEx Первая обработка #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/d908ea...6ad321392a36cd
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.11.2011, 13:11     RegEx Первая обработка #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]$
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.11.2011, 14:30     RegEx Первая обработка #8
Nameless One, В std регекс даже не конструируется. Так что там не на функции реплейса заглушка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 14:48     RegEx Первая обработка
Еще ссылки по теме:

Regex в С++ C++
Std::regex не работает C++
C++ <regex> выборка из массива

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.11.2011, 14:48     RegEx Первая обработка #9
ForEveR, ну да, логично
Yandex
Объявления
01.11.2011, 14:48     RegEx Первая обработка
Ответ Создать тему
Опции темы

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