尽管我已经对它进行了一段时间的测试,但是我仍然不确定以下内容是否有效。说我有一个形式的正则表达式

regex reg(R"(\s+)" + a + R"(\s+(.*?)\s+)" + b + R"(\s+)", regex_constants::icase);

其中a和b是具有某些内容的字符串
string a = u8"größer";
string b = u8"grüner";

那是具有UTF-8内容的字符串(我举了一些随机的例子,那里也可能有一些阿拉伯语或其他文字)。

我的问题是以下内容对结果是否有影响:
regex reg(u8R"(\s+)" + a + u8R"(\s+(.*?)\s+)" + b + u8R"(\s+)", regex_constants::icase);

在我的所有测试中,我都没有注意到任何区别,使用和不使用u8前缀的结果始终相同。那么,这真的没用吗,还是有一些我还没有遇到过的隐藏效果?

最佳答案

u8前缀对字符串文字的唯一影响是,必须保证文字以UTF-8编码。允许实现将未前缀的文字编码为UTF-8,但因实现而异。

例如,u8前缀不能保证您的正则表达式引擎真正理解Unicode大小写折叠。也不能保证它能理解Unicode期间。它基于字节序列而不是基于Unicode规则来处理匹配项的可能性很好。

关于c++ - C++ 11正则表达式和字符串u8前缀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43572481/

10-11 18:16