If a pattern in which a normal character is escaped (e.g.: "a\bc"), the libc++ that ships with FreeBSD only appears to use the part of the pattern up to that character. Test program: ===== regextest.cpp BEGIN ===== #include <iostream> #include <regex> #include <vector> using namespace std; int main() { vector<string> patterns = { R"(abc)", R"(a\bc)", R"(a\bx)", R"(a\xc)", R"(x\bc)", }; for (const string &pattern : patterns) { cout << pattern << ": "; try { regex r(pattern, regex::extended); bool match = regex_search("abc", r); cout << (match ? "match" : "no match") << endl; } catch (const std::regex_error &e) { cout << "regex error: " << e.what() << endl; } } return 0; } ===== regextest.cpp END ===== expected output: abc: match a\bc: match a\bx: no match a\xc: no match x\bc: no match Incorrect output on FreeBSD 12.1 with system c++ compiler (clang 8.0.1): abc: match a\bc: match a\bx: match a\xc: match x\bc: no match On FreeBSD, gcc9 works correctly, so does clang-8 on Ubuntu, which makes me think this is specific to the FreeBSD system compiler.
Could you please submit this upstream instead? This has to do with libc++, not specifically with FreeBSD, as it gives precisely the same output on macOS. I think you see different output on Ubuntu with clang, because it will use libstdc++ there.