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

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

Восстановить пароль Регистрация
 
dev.nikor
 Аватар для dev.nikor
25 / 26 / 1
Регистрация: 26.07.2010
Сообщений: 297
04.05.2013, 15:51     Проверка на наличие подстроки регулярными выражениями #1
Здравствуйте. С помощью регулярных выражений я пытаюсь проверить наличие подстроки. Для этого пишу такой код:
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2013, 15:51     Проверка на наличие подстроки регулярными выражениями
Посмотрите здесь:

C++ Проверка строчьки на наличие букв
C++ Не получается работать с регулярными выражениями
Проверка на наличие файла C++
C++ Проверка на наличие файла
C++ Проверка на наличие флешки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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;
}
dev.nikor
 Аватар для dev.nikor
25 / 26 / 1
Регистрация: 26.07.2010
Сообщений: 297
04.05.2013, 16:24  [ТС]     Проверка на наличие подстроки регулярными выражениями #3
yuron_477, а если подстроку для поиска вводит пользователь, и он введет "C++", то вылетает эксепшн. Это можно как нибудь исправить?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.05.2013, 16:46     Проверка на наличие подстроки регулярными выражениями #4
Если так вводить:
C++
1
"C\\+{2}"
,то нормально, если добавить проверку по краям на границу слов, то не находит соответствий. Не знаю в чем прикол.

Добавлено через 7 минут
В принцыпе, можно просто пробелы поставить
C++
1
" C\\+{2} "
dev.nikor
 Аватар для dev.nikor
25 / 26 / 1
Регистрация: 26.07.2010
Сообщений: 297
04.05.2013, 16:52  [ТС]     Проверка на наличие подстроки регулярными выражениями #5
yuron_477, То есть, нужно написать функцию, которая перед каждым плюсом (либо другим специальным символом) будет вставлять "\\"?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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";
Yandex
Объявления
04.05.2013, 17:52     Проверка на наличие подстроки регулярными выражениями
Ответ Создать тему
Опции темы

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