I want to check version number eg 1.13.1 , 1.22.34 , 4.12.3 etc with regular expression using regex_match() from regex header.
I'm doing this way
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main () {
if (regex_match ("1.14.1", regex("\d .\d .\d ") ))
{
cout << "string:literal => matched\n";
}
return 0;
}
But I am not getting it matched ? It seems the regular expression is correct
CodePudding user response:
A backslash (\
) escapes the next character in a const char
literal.
That said, your escape sequences \d
cannot be recognized correctly as regex matching pattern, because it expects a \
itself. A backslash can be represented in those literals, by escaping itself: \\
, or using a raw string literal (see 2nd option).
regex("\d .\d .\d ")
Should be
regex("\\d .\\d .\\d ")
or
regex(R"(\d .\d .\d )")