#define BOOST_REGEX_DYN_LINK #include <iostream> #include <boost\regex.hpp> using namespace boost; using namespace std; int main() { regex reg_exp("\xF8.\x2A..\x0D(P|V)[0-9A-F]{3}"); // I would expect this to match. cout << regex_match("\xF8p\x2Aqf\x0DPFFF", reg_exp) << endl; // I would expect this to not match due to the 'w'. // Why does it match? cout << regex_match("\xF8p\x2Aqfw\x0DPFFF", reg_exp) << endl; }
Dave wrote:
#define BOOST_REGEX_DYN_LINK
#include <iostream> #include <boost\regex.hpp>
using namespace boost; using namespace std;
int main() { regex reg_exp("\xF8.\x2A..\x0D(P|V)[0-9A-F]{3}");
// I would expect this to match. cout << regex_match("\xF8p\x2Aqf\x0DPFFF", reg_exp) << endl;
// I would expect this to not match due to the 'w'. // Why does it match? cout << regex_match("\xF8p\x2Aqfw\x0DPFFF", reg_exp) << endl; }
Because '\x2A' is '*' which is a regex meta-character which means "match the previous thing zero or more times. -- Eric Niebler Boost Consulting www.boost-consulting.com
// I would expect this to not match due to the 'w'. // Why does it match? cout << regex_match("\xF8p\x2Aqfw\x0DPFFF", reg_exp) << endl;
I believe the \x2A character is a '*' right? If so the compiler converts \x2A to a * so the regex engine sees a ".*". If you double up those escapes and use "\\x2A" then the regex engine will parse the escape rather than the compiler, and so it won't be interpreted as a quantifier anymore. This one had me fooled for a while BTW ;-) John.
participants (3)
-
Dave
-
Eric Niebler
-
John Maddock