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

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

Войти
Регистрация
Восстановить пароль
 
Deligor
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 30
#1

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

12.08.2014, 00:21. Просмотров 507. Ответов 8
Метки нет (Все метки)

Никак не могу освоить добавленную в 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++
Смысл кода ниже, спарсить страницу и найти ссылки, юзаю regex, написал небольшую функцию для удобности его использования, в итоге когда...

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

Программа которая находит минимальное из введенных пользователем чисел - C++
Нужна программа, которая находит минимальное из введенных пользователем чисел. Количество вводимых чисел и сами числа определяет...

Программа не находит количество букв и оставшихся символов в строке - C++
Добрый вечер форумчани! Помогите пожалуйста исправить ошибки в программе. Программа должна была считать кол-во букв и других символов в...

Разработать функцию, которая находит сумму в каждой строке матрицы, а среди сумм - максимум - C++
Разработать функцию, которая для произвольной матрицы находит сумму в каждом рядке матрицы а среди сумм - максимум.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
12.08.2014, 00:49     Нужна программа, которая по регулярному выражению находит все совпадения в строке #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Проверьте версию компилятора:
Bash
1
g++ --version
Полноценную поддержку регулярных выражений обещали сделать в 4.9, до этого там заглушка стояла.
Если хотите, то можете попробовать рег. выражения из boost.
Renji
1849 / 1267 / 290
Регистрация: 05.06.2014
Сообщений: 3,619
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
1849 / 1267 / 290
Регистрация: 05.06.2014
Сообщений: 3,619
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++
Помогите написать программу, которая сортирует массив и находит количество различных чисел в нем. Добавлено через 2 часа 55 минут ...

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

Программа находит все делители - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Russian&quot;); int num; cout...

Написать программу, которая находит все пары А и В для числа Р - C++
Пиплы , пожалейте помогите если есть какието мысли впишитесь!!ПЛЗ суть такова написать прогу на С+ Очевидно, что любое натуральное...

Написать программу в которой описать функцию, которая находит кол-во символов в n-ой строке непустого текстового файла. - C++
Прошу помочь решить задачки!:(очень нужно (Билет №12) Написать программу в которой описать функцию Razmer(t,n), которая находит...


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

Или воспользуйтесь поиском по форуму:
gromo
370 / 269 / 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     Нужна программа, которая по регулярному выражению находит все совпадения в строке
Ответ Создать тему
Опции темы

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