C ++: код сопоставления регулярных выражений, печать нескольких совпадений? - PullRequest
0 голосов
/ 30 мая 2020

Я использую следующий код, который похож на Stroustrup's C ++ 4th Edition Page 127 & 128. В журнале вывода, приведенном ниже, он печатает первое совпадение, но не совпадение с конечными цифрами -XXXX.

Кто-нибудь знает, почему конечные цифры не совпадают и / или печатаются ??

Спасибо

#include <iostream>
#include <regex>
using namespace std;

int main(int argc, char *argv[])
{
    // ZIP code pattern: XXddddd-dddd and variants
    regex pat (R"(\w{2}\s*\d{5}(−\d{4})?)");
    int lineno = 0;

    for (string line; getline(cin,line);) {
    ++lineno;
    smatch matches; // matched strings go here
    if (regex_search(line, matches, pat)) // search for pat in line
        for (auto p : matches) {
            cout << p << " ";
        }
    cout << endl;
//      cout << lineno << ": " << matches[0] << '\n';
    }

    return 0;
}

Журнал вывода:

$ ./a.out
AB00000-0000
AB00000 

1 Ответ

0 голосов
/ 30 мая 2020

не -. Это два разных символа. У вас есть в коде и - на входе. Здесь я исправил код:

#include <iostream>
#include <regex>
using namespace std;

int main(int argc, char *argv[])
{
    // ZIP code pattern: XXddddd-dddd and variants
    regex pat (R"(\w{2}\s*\d{5}(-\d{4})?)");
    int lineno = 0;

    for (string line; getline(cin,line);) {
    ++lineno;
    smatch matches; // matched strings go here
    if (regex_search(line, matches, pat)) // search for pat in line
        for (auto p : matches) {
            cout << p << " ";
        }
    cout << endl;
//      cout << lineno << ": " << matches[0] << '\n';
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...