Google RE2 无法识别正则表达式中的 Unicode 转义

Google RE2 doesn't recognize Unicode escape in regex

我正在用 C++ 开发一个应用程序,它通过使用 Google RE2 库使用正则表达式验证配置文件。配置文件的内容被读入 std::string;

到目前为止,我声明了这个包含正则表达式的字符串:

const string EXPR_FAILED_FILE(R"([^\u0020-\u007E\n]|(\b.*(Mensagem|Antes|Loop|Movimentar|\|).*)|\[0-9]{3,4})");

但是,在下面的这个实现中,我在检测测试字符串 (strInput) 中的一些无效字符时遇到了一些问题

bool checkStringConsistency(const string& strInput){
    RE2 re(EXPR_FAILED_FILE);
    bool b_matches = RE2::FullMatch(strInput, re);
    return b_matches;
}

当我 运行 代码时,我在 stderr 中收到这些消息:

re2/re2.cc:205: Error parsing '[^\u0020-\u007E\n]|(\b.*(Mensagem|Antes|Loop|Movimentar|\|).*)|\[0-9]{3,4}': invalid escape sequence: \u
re2/re2.cc:890: Invalid RE2: invalid escape sequence: \u

RE2 似乎无法识别 \u 序列来寻找 Unicode 字符范围。我在 regexr.com 测试了这个表达式,那里通常检测到无效字符。

这里可能有什么问题?

每个正则表达式引擎有 its own syntax and in RE2 you need to use [^\x{0020}-\x{007E}\n] instead of [^\u0020-\u007E\n]. See the syntax document:

Escape sequences:
\a  bell (== [=10=]7)
\f  form feed (== 4)
\t  horizontal tab (== 1)
\n  newline (== 2)
\r  carriage return (== 5)
\v  vertical tab character (== 3)
\*  literal «*», for any punctuation character «*»
3    octal character code (up to three digits)
\x7F    hex character code (exactly two digits)
\x{10FFFF}  hex character code
\C  match a single byte even in UTF-8 mode
\Q...\E literal text «...» even if «...» has punctuation

\u用于匹配大写字符,标记为NOT SUPPORTED