hell0w0rd
@hell0w0rd
Просто разработчик

Почему не работают регулярки?

Есть простейший код, почему std::regex_search возвращает true, а сами совпадения не выводятся?
#include <iostream>
#include <regex>

int main(int argc, const char * argv[])
{
    std::string strs[] = {
        "/users/{id}",
        "/users/{i:id}"
    };
    std::regex pattern("{(?:(\\w+):)*(\\w+)}");
    std::smatch matches;
    
    for (auto str : strs) {
        std::cout << "String: " << str << std::endl;
        
        std::cout << "Match: " << std::boolalpha << std::regex_search(str, matches, pattern) << std::endl;
        
        for (auto match : matches) {
            std::cout << match.str() << std::endl;
        }
    }
}

String: /users/{id}
Match: true

String: /users/{i:id}
Match: true
  • Вопрос задан
  • 2710 просмотров
Решения вопроса 1
@Sumor
Символы { и } являются служебными и их нужно маскировать.
std::regex pattern("[{](?:(\\w+):)*(\\w+)[}]");
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы