Класс C++ regex не соответствует

Исходя из того, что я исследовал, выражение "[:alpha:]" будет соответствовать любому буквенному символу, но выражение соответствует только символу в нижнем регистре, а не в верхнем. Я не уверен, что с ним не так.

std::regex e ("[:alpha:]");
if(std::regex_match("A",e))
     std::cout<<"hi";
  else
     std::cout<<"no";

2 ответа

Решение

Изменить это:

std::regex e ("[:alpha:]");

чтобы:

std::regex e ("[[:alpha:]]");

Как сказал Адриан: Обратите внимание, что скобки в именах классов являются дополнительными к тем, которые открывают и закрывают определение класса. Например: [[:alpha:]] это класс символов, который соответствует любому буквенному символу. Читайте больше в ссылке.

Вы должны использовать [[:alpha:]]

смотреть онлайн пример

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

int main() {
    std::regex e ("[[:alpha:]]");
if(std::regex_match("A",e))
     std::cout<<"hi";
  else
     std::cout<<"no";
    return 0;
}
Другие вопросы по тегам