# C++ regex not matching

• C/++/#
I am wondering why this is not matching. I tested my regular expression on notepad2 and it matches fine.

std::string line = " 10 0 5 0";
std::regex rgx("\s+\d+\s+\d+\s+\d+\s+\d+");

if (regex_match(line, rgx))
{
// do something...
int a = 2;
}

D H
Staff Emeritus
"\s" is a single character string. Containing what character? Who knows. That backslash s is a nonstandard escape sequence. Your code won't even compile on my computer. You need to use "\\s" to denote a backslash followed by an 's'. The same goes for all of your other single backslashes.

Mark44
Mentor
I am wondering why this is not matching. I tested my regular expression on notepad2 and it matches fine.

Code:
std::string line = "		10			0		5		0";
std::regex rgx("\s+\d+\s+\d+\s+\d+\s+\d+");

if (regex_match(line, rgx))
{
// do something...
int a = 2;
}

The only thing that occurs to me is that the string is terminated with an ASCII null char, possibly looking like \0, and your regex match string doesn't take that into account.

BTW, I replaced your font tags with [code] tags. Now your spaces are appearing.

1 person
Ibix
2020 Award
Double up those \. The compiler is interpreting \s as a special character, so the regex engine is seeing something like s+, not \s+. Use \\s and \\d and you'll be fine.

Edit: must type quicker.

Mark44
Mentor
Double up those \. The compiler is interpreting \s as a special character, so the regex engine is seeing something like s+, not \s+. Use \\s and \\d and you'll be fine.
Your explanation makes more sense than mine...
Edit: must type quicker.

Double up those \. The compiler is interpreting \s as a special character, so the regex engine is seeing something like s+, not \s+. Use \\s and \\d and you'll be fine.

Edit: must type quicker.

doubling back slash worked. thank you

Ibix