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

Нужна программа, которая по регулярному выражению находит все совпадения в строке - C++

Войти
Регистрация
Восстановить пароль
 
Deligor
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 30
12.08.2014, 00:21     Нужна программа, которая по регулярному выражению находит все совпадения в строке #1
Никак не могу освоить добавленную в C++11 библиотеку <regex>! Помогите пожалуйста!

Нужна программа, которая по регулярному выражению находит все совпадения в строке (<string>), и, если не затруднит, объясните, пожалуйста, как она работает и как работают здесь регулярные выражения и работают ли вообще.

Дело в том что уже долго пытаюсь написать такую программу на C++11... Писал на Питоне, там все интуитивно понятно (взглянул на пример кода - сразу написал), в Сишке все сложнее, у меня даже на пример из документации выдает ошибку. Никак не могу понять в чем дело... Если пишу сам, ошибки не выдает, но не выдает и вообще ничего (вывожу элементы smatch в цикле, но не выводится ничего... совпадения точно есть!). После использования regex_search, пытался вывести хотя бы один элемент smatch... Ничего... Помогите, у меня уже мозг кипит! Пожалуйста!

Если это имеет значение, то система - Linux Debian, IDE - CodeBlocks.

Заранее премного благодарен!

Добавлено через 2 минуты
Вот пример из документации C++11, который я использовал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// regex_search example
#include <iostream>
#include <string>
#include <regex>
 
int main ()
{
  std::string s ("this subject has a submarine as a subsequence");
  std::smatch m;
  std::regex e ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"
 
  std::cout << "Target sequence: " << s << std::endl;
  std::cout << "Regular expression: /\\b(sub)([^ ]*)/" << std::endl;
  std::cout << "The following matches and submatches were found:" << std::endl;
 
  while (std::regex_search (s,m,e)) {
    for (auto x:m) std::cout << x << " ";
    std::cout << std::endl;
    s = m.suffix().str();
  }
 
  return 0;
}
Добавлено через 7 минут
Он не работает...
Должен выдавать:
Target sequence: this subject has a submarine as subsequence
Regular expression: /\b(sub)([^]*)/
The following matches and submatches were found:
subject sub ject
submarine sub marine
subsequence sub sequence

Выдает:
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
Aborted

Мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <regex>
#include <string>
 
using namespace std;
 
int main(){
    string s = "g 123abc123fdsgfdg";
    smatch m;
    regex e ("123...123");
    regex_search(s,m,e);
    cout << m[0];
    return 0;
}
Выдает пустоту...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 00:21     Нужна программа, которая по регулярному выражению находит все совпадения в строке
Посмотрите здесь:

C++ Написать программу, которая находит все пары А и В для числа Р
C++ нужна функция которая находит файлы
Программа не находит количество букв и оставшихся символов в строке C++
Разработать функцию, которая находит сумму в каждой строке матрицы, а среди сумм - максимум C++
C++ Написать программу в которой описать функцию, которая находит кол-во символов в n-ой строке непустого текстового файла.
Функция для поиска по регулярному выражению C++
C++ Программа находит все делители
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
12.08.2014, 00:49     Нужна программа, которая по регулярному выражению находит все совпадения в строке #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Проверьте версию компилятора:
Bash
1
g++ --version
Полноценную поддержку регулярных выражений обещали сделать в 4.9, до этого там заглушка стояла.
Если хотите, то можете попробовать рег. выражения из boost.
Renji
1621 / 1069 / 260
Регистрация: 05.06.2014
Сообщений: 3,160
12.08.2014, 08:20     Нужна программа, которая по регулярному выражению находит все совпадения в строке #3
Если это имеет значение, то система - Linux Debian, IDE - CodeBlocks.
И stable ветка Дебиана, да? Или вышеупомянутый boost, или пытаться скрещивать стабл и тестинг ветки, или полностью переезжать на тестинг-ветку.
Deligor
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 30
12.08.2014, 13:51  [ТС]     Нужна программа, которая по регулярному выражению находит все совпадения в строке #4
Ветка Дебана сейчас stable, частично обновленная до testing...

Добавлено через 1 минуту
Сейчас установлена g++ 4.7, при попытке обновиться, плюется ошибками, мол пакет не найден.

То есть до 4.9 регулярные выражения не работают? Я читал на форуме, что они не доделаны, но там посты были 2-х летней давности, я думал уже доделали...
Renji
1621 / 1069 / 260
Регистрация: 05.06.2014
Сообщений: 3,160
12.08.2014, 14:49     Нужна программа, которая по регулярному выражению находит все совпадения в строке #5
Сейчас установлена g++ 4.7, при попытке обновиться, плюется ошибками, мол пакет не найден.
В /etc/apt/apt.conf кинуть APT:efault-Release "stable"; В /etc/apt/sources.list дописать репозитории тестинга. Наконец, запустить apt-get upgrade и apt-get -t testing install g++ . Должно помочь (хотя, потянет вагон зависимостей от тестинга).

Добавлено через 10 минут
Наконец, запустить apt-get upgrade
Тьфу-ты, apt-get update.
Trwsdf
Заблокирован
12.08.2014, 15:58     Нужна программа, которая по регулярному выражению находит все совпадения в строке #6
Вот тебе пример
https://ru.wikipedia.org/wiki/C%2B%2...BD.D0.B8.D1.8F

Добавлено через 1 минуту
Цитата Сообщение от Deligor Посмотреть сообщение
то система - Linux Debian, IDE - CodeBlocks.
Омг. как я вам не завидую
Deligor
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 30
12.08.2014, 16:19  [ТС]     Нужна программа, которая по регулярному выражению находит все совпадения в строке #7
Цитата Сообщение от Renji Посмотреть сообщение
В /etc/apt/apt.conf кинуть APT:efault-Release "stable"; В /etc/apt/sources.list дописать репозитории тестинга. Наконец, запустить apt-get upgrade и apt-get -t testing install g++ . Должно помочь (хотя, потянет вагон зависимостей от тестинга).
У меня все это и так сделано, просто, когда я запускаю aptitude upgrade g++, у меня выдает примерно такое: Нужна программа, которая по регулярному выражению находит все совпадения в строке
Deligor
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 30
12.08.2014, 17:44  [ТС]     Нужна программа, которая по регулярному выражению находит все совпадения в строке #8
Цитата Сообщение от Trwsdf Посмотреть сообщение
Омг. как я вам не завидую
Почему? Мне нравится

Добавлено через 28 минут
Все таки смог обновить g++. Все решилось добавлением Яндексовского зеркала в /etc/apt/sources.list. После этого все обновилось. Теперь все работает.

Всем спасибо!

Добавлено через 20 минут
А почему \w не работает?

Добавлено через 35 минут
Уже понял. В С++ используется \\ вместо \. Например \\w.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2014, 18:14     Нужна программа, которая по регулярному выражению находит все совпадения в строке
Еще ссылки по теме:

Программа которая находит в массиве количество элементов равных нулю C++
C++ Загрузка процессора при поиске по регулярному выражению
Программа которая находит минимальное из введенных пользователем чисел C++
C++ Программа, которая сортирует массив и находит количество различных чисел

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

Или воспользуйтесь поиском по форуму:
gromo
 Аватар для gromo
367 / 266 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
12.08.2014, 18:14     Нужна программа, которая по регулярному выражению находит все совпадения в строке #9
Цитата Сообщение от Deligor Посмотреть сообщение
Уже понял. В С++ используется \\ вместо \. Например \\w.
Чтоб не городить таких огородов, в С++11 есть raw string literals
C++
1
    std::regex rx(R"(\w)");
Yandex
Объявления
12.08.2014, 18:14     Нужна программа, которая по регулярному выражению находит все совпадения в строке
Ответ Создать тему
Опции темы

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