Как извлечь данные из строки с помощью std::regex?

Есть строка вида

VariableName VariableValue

Где

  • VariableName - имя параметра, строка символов без пробелов
  • VariableValue - значение параметра, строка символов без пробелов

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

Каким образом с помощью std::regex можно задавая VariableName получать из строки VariableValue?


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

Автор решения: IL99progC

Вероятно, вам потребуется regex_search описание функции Тут пример пример использования функции Попробовать как работают все эти функции по работе со строками можно тут тестер регулярных выражений онлайн

→ Ссылка
Автор решения: Максим

Нужно использовать std::regex_match

#include <string>
#include <regex>
#include <iostream>
#include <sstream>

std::string getValue(std::string const& data, std::string const& variableName) {
    std::string variableValue;
    const std::regex pattern{R"(^[[:blank:]]*)" + variableName + R"([ ]+(\w+)\s*$)"};
    std::smatch match;
    if (std::regex_match(data, match, pattern) and match.size() >= 2) {
        variableValue = match[1];
    };
    return variableValue;
}

int main() {
    std::stringstream test_data("Var1 Val1\n\n\n\nVar2  Val2\n Var3  Val3\n Var4  Val4 \n Var5  Val5 \n");
    std::string var_name_list[] = {"Var1", "Var2", "Var3", "Var4"};
    for (std::string line; std::getline(test_data, line);) {
        for (auto name: var_name_list) {
            auto r = getValue(line, name);
            if (not r.empty()) {
                std::cout << name << " " << r << std::endl;
                break;
            }
        }
    }
    return 0;
}
→ Ссылка