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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Формирование нечетных чисел http://www.cyberforum.ru/cpp-beginners/thread1241335.html
Приветствую всех! Имеется такой код: srand(time(0)); int ia,c=0; for(int i=0; i!=5; i++) { while(ia % 2 == 0) { ia = rand() % 100; }
C++ Классы: Не создаются объекты класса Apple Includes.h #include <stdlib.h> #include <gl\glut.h> #include <math.h> #include<stdio.h> #include<time.h> #include<stdio.h> #include<iostream> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1241325.html
Неправильно выводятся данные структуры C++
#include <iostream> #include <conio.h> #include <string> #define deathgant 7 using namespace std; union tag_value{ int kill_1; int kill_2;
Начать работать с SQLite C++
Помогите новичку! Пишу консольную программу под Win на С++ Компилирую этим (BAT-файлом): g++.exe %prj%_main_win.cpp %prj%src\*.cpp -o %bin% -I%prj% -std=c++11 По советам на хабре (http://habrahabr.ru/post/149390/) скачал *.Н файл, кинул в папку с src\*.cpp и пытаюсь подключить к программе: #include "src\sqlite3.h" ... if( sqlite3_open("my_cosy_database.dblite", &db) ) ...
C++ Чтение динамического массива с конца http://www.cyberforum.ru/cpp-beginners/thread1241309.html
Можно ли каким-то образом считывать динамический массив не с начала,а с конца?
C++ Компиляция C++ кода через консоль Есть простенький код: #include <iostream> #include <vector> int main(int argc, char *argv){ std::vector<int> vec; int num=1; std::cout<<"Enter positive numbers followed by 0:\n"; while (std::cin >> num, num!=0){ подробнее

Показать сообщение отдельно
Deligor
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 30
12.08.2014, 00:21     Нужна программа, которая по регулярному выражению находит все совпадения в строке
Никак не могу освоить добавленную в 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;
}
Выдает пустоту...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru