c++ - Why doesn't boost regex '.{2}' match '??' -
i'm trying match chunks if interesting data within data stream.
there should leading <
4 alphanumeric characters, 2 characters of checksum (or ??
if no shecksum specified) , trailing >
.
if last 2 characters alphanumeric, following code works expected. if they're ??
though fails.
// set pre-populated data buffer example std::string haystack = "fli<data??>bble"; // set regex static const boost::regex e("<\\w{4}.{2}>"); std::string::const_iterator start, end; start = haystack.begin(); end = haystack.end(); boost::match_flag_type flags = boost::match_default; // try , find of interest in buffer boost::match_results<std::string::const_iterator> what; bool succeeded = regex_search(start, end, what, e, flags); // <-- returns false
i've not spotted in the documentation suggests should case (all null , newline should match aiui).
so have missed?
because ??>
trigraph, converted }
, code equivalent to:
// set pre-populated data buffer example std::string haystack = "fli<data}bble"; // set regex static const boost::regex e("<\\w{4}.{2}>"); std::string::const_iterator start, end; start = haystack.begin(); end = haystack.end(); boost::match_flag_type flags = boost::match_default; // try , find of interest in buffer boost::match_results<std::string::const_iterator> what; bool succeeded = regex_search(start, end, what, e, flags); // <-- returns false
you can change this:
std::string haystack = "fli<data?" "?>bble";
demo (note: use std::regex
more or less same)
note: trigraph deprecated c++11, (likely) removed c++17
Comments
Post a Comment