Parser::extractCommand: parse with string_view instead of regex to avoid inconsistent behavior in libcs
Αυτή η υποβολή περιλαμβάνεται σε:
γονέας
bcf9d605d2
υποβολή
da2a5b10fe
18
parser.cpp
18
parser.cpp
@ -65,15 +65,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))
|
|
||||||
{
|
|
||||||
|
|
||||||
if(match.size() > 1)
|
std::string_view view = content;
|
||||||
|
size_t pos = 0;
|
||||||
|
if((pos = view.find(cmd)) != std::string::npos)
|
||||||
|
{
|
||||||
|
view.remove_prefix(pos);
|
||||||
|
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 "";
|
||||||
|
Φόρτωση…
Αναφορά σε νέο ζήτημα
Block a user