我使用下面的代码尝试使用正则表达式匹配符号(例如,我尝试匹配圆形星号,http://graphemica.com/%E2%9C%AA)
#include <regex>
#include <iostream>
int main() {
std::wsmatch matches;
std::wstring x = L"✪";
// std::wregex e(L"(\\pS)+");
std::wregex e(L"([[:S:]]+)");
if (std::regex_match(x, matches, e))
{
// never reached
std::cout << "Never reached";
}
std::cout << "Bye.";
return 0;
}
符号✪(0x272A)不匹配,我也尝试过其他符号,但没有一个符号可用,(例如)。
我尝试了[:S:]
,\pS
和\p{S}
,但没有一个有效,(最后一个抛出异常)
这是类似的,(但不是同一个名称空间),问题与升级库一样,(Common symbols '\p{S}' not been 'matched' using boost wregex)
答案 0 :(得分:1)
ECMAScript第3版都没有。 POSIX正则表达式语法也不支持Unicode类别字符类。您可以使用基于\U
和\p{So}
的字符范围自行构建它们,但是希望像boost::u32regex
这样的事情是目前规范的原因。
正如我在your other question上回答的那样,如果你真的想要使用它们,如果启用了ICU支持,Boost.Regex会通过int main() {
Wurzel a;
Wurzel b=3; // error: conversion from 'int' to non-scalar type 'Wurzel' requested
return 0;
}
支持它们。 (PCRE / PCRE2也支持它们,但与大多数C库一样,我不愿意为新的C ++代码推荐这些。)