C ++ 11正则表达式和字符串u8前缀

时间:2017-04-23 14:37:46

标签: c++ regex c++11

虽然我已经对自己进行了一段时间的测试,但我仍然不确定以下是否会产生任何影响。假设我有一个表格的正则表达式

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前缀时始终相同。那么,这真的没用,还是有一些隐藏的效果,我还没有遇到过呢?

1 个答案:

答案 0 :(得分:2)

u8前缀对字符串文字的唯一影响是文字应保证以UTF-8编码。允许实现将未加前缀的文字编码为UTF-8,但是从实现到实现会有所不同。

例如,u8前缀并不能保证您的正则表达式引擎真正理解Unicode案例折叠。它也不保证它理解Unicode时期;根据字节序列而不是基于Unicode规则处理匹配的几率很好。

相关问题