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



我正在C++中开发一个应用程序,该应用程序通过使用Google RE2库使用regex验证配置文件。配置文件的内容被读取到一个std::字符串中;

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

const string EXPR_FAILED_FILE(R"([^u0020-u007En]|(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-u007En]|(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上测试了这个表达式,在那里可以正常检测到无效字符。

这里可能出了什么问题?

每个正则表达式引擎都有自己的语法,在RE2中需要使用[^x{0020}-x{007E}n]而不是[^u0020-u007En]。参见语法文档:

Escape sequences:
a  bell (== 07)
f  form feed (== 14)
t  horizontal tab (== 11)
n  newline (== 12)
r  carriage return (== 15)
v  vertical tab character (== 13)
*  literal «*», for any punctuation character «*»
123    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用于匹配大写字符,并标记为不支持

最新更新