gpt4 book ai didi

c++ - 常用符号 '\pS' 不是 'matched' 使用 std::wregex

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:38 25 4
gpt4 key购买 nike

我正在使用下面的代码尝试使用正则表达式匹配符号,(例如,我正在尝试匹配圆星符号 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},它们都不起作用,(最后一个抛出异常)

这是一个类似(但不是同一个命名空间)的问题,与 boost 库的问题相同,( Common symbols '\p{S}' not been 'matched' using boost wregex )

最佳答案

ECMAScript 第 3 版都不是。 POSIX 正则表达式语法也不支持 Unicode 类别字符类。您可以使用基于 \u\U 的字符范围自行形成它们,但是希望像 \p{So} 这样的东西是一个迷路原因与目前的规范。

正如我在 your other question 上的回答,如果你真的想使用它们,Boost.Regex 通过 boost::u32regex 支持它们(如果构建时启用了 ICU 支持)。 (PCRE/PCRE2 也支持它们,但与大多数 C 库一样,我犹豫是否要将它们推荐给新的 C++ 代码。)

关于c++ - 常用符号 '\pS' 不是 'matched' 使用 std::wregex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38541718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com