Parser::extractCommand: parse with string_view instead of regex to avoid inconsistent behavior in libcs

This commit is contained in:
Albert S. 2018-11-05 22:36:18 +01:00
parent 0bd12d1684
commit 9abfa1f2b7

View File

@ -66,16 +66,19 @@ std::vector<std::string> Parser::extractCategories(std::string content) const
std::string Parser::extractCommand(std::string cmdname, std::string content) const std::string Parser::extractCommand(std::string cmdname, std::string content) const
{ {
std::string regstr = "(\\s|\\S)*\\[cmd\\:" + cmdname + "\\](.*?)\\[/cmd\\:" + cmdname + "\\](\\s|\\S)*"; std::string cmd = "[cmd:" + cmdname + "]";
std::regex reg { regstr }; std::string cmdend = "[/cmd:" + cmdname + "]";
std::smatch match;
if(std::regex_match(content, match, reg)) std::string_view view = content;
size_t pos = 0;
if((pos = view.find(cmd)) != std::string::npos)
{ {
view.remove_prefix(pos);
if(match.size() > 1) view.remove_prefix(cmd.size());
if((pos = view.find(cmdend)) != std::string::npos)
{ {
return match.str(2); auto result = view.substr(0, pos);
return std::string { result };
} }
} }
return ""; return "";