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

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

Войти
Регистрация
Восстановить пароль
 
dev.nikor
25 / 26 / 1
Регистрация: 26.07.2010
Сообщений: 297
#1

Проверка на наличие подстроки регулярными выражениями - C++

04.05.2013, 15:51. Просмотров 576. Ответов 5
Метки нет (Все метки)

Здравствуйте. С помощью регулярных выражений я пытаюсь проверить наличие подстроки. Для этого пишу такой код:
C++
1
2
3
4
5
6
7
std::regex search(searchOption, std::regex::icase);
if(regex_search(currentBook, search))return true;
else return false;
 
//searchOption - подстрока, которую нужно найти
 
//currentBook - строка, где нужно искать
Но если у меня searchOption будет равен "C++", то у меня вылетит эксепшн. Можно ли это как-то исправить?

И можно ли сделать так, чтобы искалась не просто подстрока, а само слово в строке, например:
C++
1
2
searchOption = "app";
currentBook = "green apple"
Тут regex_search должен вернуть false, а при currentBook = "cool app" - true
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2013, 15:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка на наличие подстроки регулярными выражениями (C++):

Проверка формата ввода аргументов командной строки регулярными выражениями - C++
Часто при запуске программы на вход подаются дополнительные данные в определённом формате (взять хоть компиляцию с флагами). Валидация...

Работа с регулярными выражениями С++ - C++
Опишите функцию анализа номера, обработайте ошибку указания номера у недопустимом формате (допустимий формат (095)224-43-24)

Работа с регулярными выражениями и исключения - C++
Очень простой вопрос - какую взять библиотеку для работы с регулярными выражениями, удовлетворяющую одному из следующих условий: 1)...

Не получается работать с регулярными выражениями - C++
Добрый день, коллеги! Обращаюсь с вопросом, потому что новичок. Мне необходимо, используя регулярные выражения, скопировать определенные...

Выбрать различные цифры из однотипных строк регулярными выражениями - C++
есть много таких строк: <AddOrder price="100.20" orderId="199" operation="BUY" /> <DeleteOrder orderId="199" /> нужно выцепить отсюда...

Обработка файов регулярными выражениями. - C++
Задайте верное направление. Исходная задача. Необходимо обработать текстовый файл "умным образом". Где то достаточно просто замены "А"...

5
DiffEreD
1435 / 772 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.05.2013, 16:12 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <boost/regex.hpp>
 
bool seach(const std::string& s)
{
    static boost::regex reg("\\bapp\\b");//\\<app\\>
    return boost::regex_search(s, reg);
}
 
 
int main()
{
    std::cout<<seach("green apple")<<"\n";
    std::cout<<seach("cool app")<<"\n";
    std::cout<<seach("coll app cool")<<"\n";
    
    std::cout<<"\n";
    return 0;
}
1
dev.nikor
25 / 26 / 1
Регистрация: 26.07.2010
Сообщений: 297
04.05.2013, 16:24  [ТС] #3
yuron_477, а если подстроку для поиска вводит пользователь, и он введет "C++", то вылетает эксепшн. Это можно как нибудь исправить?
0
DiffEreD
1435 / 772 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.05.2013, 16:46 #4
Если так вводить:
C++
1
"C\\+{2}"
,то нормально, если добавить проверку по краям на границу слов, то не находит соответствий. Не знаю в чем прикол.

Добавлено через 7 минут
В принцыпе, можно просто пробелы поставить
C++
1
" C\\+{2} "
0
dev.nikor
25 / 26 / 1
Регистрация: 26.07.2010
Сообщений: 297
04.05.2013, 16:52  [ТС] #5
yuron_477, То есть, нужно написать функцию, которая перед каждым плюсом (либо другим специальным символом) будет вставлять "\\"?
0
DiffEreD
1435 / 772 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.05.2013, 17:52 #6
А если пользователю завтра нужно будет найти не "C++", а "C#", - что, каждый раз новую функцию писать? Я бы тут воспользовался обычным поиском подстроки в строке:
C++
1
2
3
std::string searchOption = "C++";
std::string currentBook = "More effective C++";
std::cout<<boost::contains(currentBook, searchOption)<<"\n";
1
04.05.2013, 17:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2013, 17:52
Привет! Вот еще темы с ответами:

Проверка на наличие файла - C++
Добрый день. Подскажите вот такую проблему. Как сделать проверку на наличие файла? Мне нужно сделать так, если файл(conf.mysql)...

Проверка на наличие флешки - C++
char wRoot = &quot;A:\\&quot;; do { if (GetDriveType(wRoot) == DRIVE_REMOVABLE) { if...

Проверка на наличие файла - C++
Подскажите пожалуйста как сделать проверку на файл.

Проверка подстроки на положение в тексте - C++
Доброго времени суток. У меня есть программа, которая ищет слово в тексте, и выводит в дальнейшем предложение содержащее это слово, код: ...


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

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

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