Некорректно работает код с regex, cmatch

Пишу программу, в которой пользователь вводит строку, и если есть совпадение с регулярным выражением, то это совпадение выводится. Но я уже несколько раз меняла регулярное выражение те, в которых не может быть ошибки, но код не работает все равно. Ошибка где-то в if или for.

#include <iostream> 
#include <string>
#include <regex>
int main() {
std::cout<< "Enter your text: ";
std::string text;
std::cout << "\n";
std::getline(std::cin, text);
/////////////////////
std::cmatch result;
std::regex probel ("([abcd])");
if (std::regex_match(text.c_str(), probel))
   for(int i=0; i < result.size(); i++) 
   std::cout << result[i] << std::endl;
}

Пробовала и result писать в if, ничего не поменялось.


Ответы (1 шт):

Автор решения: S.H.

Давайте попробуем быть логичными.

Вот представим себе, что я ничего не знаю о регулярных выражениях, а смотрю только на код.

я вижу, что переменная result типа cmatch объявлена, но до начала цикла даже инициализирована. Тогда по какой причине Вы ожидаете, что можете сделать цикл до result.size()?

Теперь попробуем сделать то, что Вы хотите.

Итак, regex_match() возвращает true, если в строке находится паттерн, заданный регулярным выражением.

Чтобы "пройти по всем вхождениям паттеран в строку" - как я понял, чаще используется regex_search()

Вот пример использования:

    //string to be searched
    string mystr = "She sells_sea shells in the sea shore"; 


    // regex expression for pattern to be searched 
   
    regex regexp("s[a-z_]+"); 

    // flag type for determining the matching behavior (in this case on string objects)
    smatch m; 

    // regex_search that searches pattern regexp in the string mystr  
    regex_search(mystr, m, regexp); 

    cout<<"String that matches the pattern:"<<endl;
    for (auto x : m) 
        cout << x << " "; 

Я этот пример скопировал вот из этой статьи - прошу прощения, что на английском, но адекватного русского перевода мне не попалось.

Мне кажется, теперь Вы сможете решить свою задачу.

И еще один небольшой совет. Пока Вы учитесь, и не пишете программ промышленного уровня - Вы можете пользоваться using namespace std;, и Ваш код станет занчительно короче и обозримее - благодаря отсутствию префикса std:: буквально в каждой строке.

→ Ссылка