常见符号'\ pS'未使用std :: wregex进行'匹配'

时间:2016-07-23 12:19:42

标签: c++ regex c++11 std

我使用下面的代码尝试使用正则表达式匹配符号(例如,我尝试匹配圆形星号,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

1 个答案:

答案 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 ++代码推荐这些。)