为什么我不能在assign中指定regex_constants?

时间:2017-06-05 17:41:20

标签: c++ regex string visual-studio-2015 case-insensitive

我在Windows上使用std :: regex和VS2015 / VS2017。我正在尝试设置一个通用例程来执行搜索搜索以执行用户请求的8个函数:

  1. 开始
  2. 不以
  3. 开头
  4. 结束
  5. 不以
  6. 结尾
  7. 包含字符串
  8. 不包含字符串
  9. 包含提供的字符串中的任何字符
  10. 不包含提供的字符串中的任何字符。
  11. 例程传递上面的类型,关联的字符串,要搜索的字符串,如果搜索区分大小写/不敏感则表示布尔变量,以及是否仅限制搜索整个单词的另一个布尔变量(类型1)仅-6)。我修改了提供的查找字符串,如果"仅整个单词"已指定。

    e.g。

    void Search(std::wstring sRegex, std::wstring wsString, bool bCaseSensitive, bool bWholeWordsOnly);
    

    但是,我无法像我预期的那样对基本不区分的情况起作用。

    这有效:

    std::wregex reg;
    std::wsmatch m;
    
    if (bCaseSensitive) {
      reg.assign(sRegex.c_str(), std::regex::ECMAScript);
    } else {
      reg.assign(sRegex.c_str(), std::regex::ECMAScript | std::regex::icase);
    }
    
    std::regex_search(wsString, m, reg) .....
    

    但这并没有(被忽略而且更糟):

    std::wregex reg;
    std::wsmatch m;
    
    reg.assign(sRegex.c_str(), std::regex::ECMAScript |
                    (bCaseSensitive ? 0 : std::regex::icase));
    
    std::regex_search(wsString, m, reg) .....
    

    有人可以解释一下吗?

    PS。我还没有编码超过类型1,因为我想在继续之前先解决这个问题。有关&的其他类型的正则表达式字符串的任何建议没有"只有整个单词" (如适用)将非常感激。

0 个答案:

没有答案