Я написал небольшую функцию для проверки шаблона через регулярное выражение в C++. Используя любой онлайн-тестер регулярных выражений, я получаю поведение, которое я ожидал бы от регулярного выражения, которое я написал, но мой код на C++ заканчивается бесконечным циклом. Вот код:regex_match() && regex_search() бесконечный цикл
#include <string>
#include <regex>
bool check(const std::string& val, const std::string& sep) {
const static std::string REGEX_STR("^.{1,}=.{1,}(" + sep + ".{1,})*$");
const static std::regex REGEX(REGEX_STR);
std::smatch match;
//this end up in an infinite loop
return (std::regex_search(val, match, REGEX) && match.size() > 0);
//this also end up in an infinite loop
return std::regex_match(val, REGEX);
}
Может кто-нибудь объяснить мне почему? Как я могу исправить эту проблему?
Я разрабатываю на MS Visual Studio 2015 Enterprise версии 14.
Каковы значения для 'val' и' sep'? – NathanOliver
(OT: '+' не подходит для '{1,}'.) – Biffen
заменить '^. {1,} =' на '^ [^ =] {1,} =' или '^ [^ =] + = ', и если это возможно:'. {1,} ('с' [^ "+ sep +"] + ('. Таким образом, вы избежите многого возврата. –