Как использовать Regex в C ++ - PullRequest
2 голосов
/ 04 октября 2019

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

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

#include <regex>
#include <iostream>

std::regex place = "(place)\\s[ROYGBP][0-5]\\s(at)\\s[A-Z][0-9]{1,2}";
std::cin >> choice;
if(std::regex_match(choice, place)){
  return true;
}
return false;

Я ожидал, что это пройдет, но компилятор отклоняет его с

no suitable constructor exists to convert from "const char[46]" to "std::__1::basic_regex<char, std::__1::regex_traits<char>>"

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

(Этот ответ основан на удаленном ответе пользователя VTT )

std::regex Конструктор, принимающий один указатель на аргумент char, равен explicitпоэтому он не может быть вызван с использованием синтаксиса инициализации копирования. Вместо этого используйте синтаксис прямой инициализации списка:

std::regex place{"(place)\\s[ROYGBP][0-5]\\s(at)\\s[A-Z][0-9]{1,2}"};

Или используйте тот же конструктор, но измените синтаксис так, чтобы он разрешал explicit инициализацию:

std::regex place("(place)\\s[ROYGBP][0-5]\\s(at)\\s[A-Z][0-9]{1,2}");
0 голосов
/ 05 октября 2019

Ошибка, с которой вы сталкиваетесь, находится на std::regex place = "(place)\\s[ROYGBP][0-5]\\s(at)\\s[A-Z][0-9]{1,2}"; - я полагаю, что это происходит из-за неправильного синтаксиса для инициализации регулярного выражения. Попробуйте вместо этого:

std::regex place = std::regex("(place)\\s[ROYGBP][0-5]\\s(at)\\s[A-Z][0-9]{1,2}");

Убедитесь, что вы компилируете с флагом --std=c++11 (или выше);в противном случае компилятор будет разочарован вами! Согласно cppreference.com , эта функциональность не была добавлена ​​до C ++ 11. Сайт также имеет большие ресурсы по синтаксису для регулярных выражений;это то, что я использовал для создания своих проектов регулярных выражений.

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