【问题标题】:C++ count matches regex function that works with both char and wchar_t?C++ 计数匹配适用于 char 和 wchar_t 的正则表达式函数?
【发布时间】:2014-07-01 22:08:46
【问题描述】:

通过this question 的回答,我能够创建一个函数,该函数使用正则表达式来查找和替换同时适用于 char 和 wchar_t 的字符串

    template<typename CharT>
    basic_string<CharT> replaceString(const CharT* find, const CharT* str, const CharT* repl)
    {
        basic_string<CharT> text(str);
        basic_regex<CharT> reg(find);
        return regex_replace(text, reg, repl);
    }

我一直在尝试使用我的函数来实现相同的目的,以计算匹配的数量,但我无法弄清楚。目前我能做到的唯一方法是重载,但我想编写一个可以处理它的函数。

    int countMatches(const char* find, const char* str)
    {
        string text(str);
        regex reg(find);
        ptrdiff_t cnt = (distance(sregex_iterator(text.begin(), text.end(), reg), sregex_iterator()));
        return (int) cnt;
    }

    int countMatches(const wchar_t* find, const wchar_t* str)
    {
        wstring text(str);
        wregex reg(find);
        ptrdiff_t cnt = (distance(wsregex_iterator(text.begin(), text.end(), reg), wsregex_iterator()));
        return (int) cnt;
    }

【问题讨论】:

    标签: c++ regex char wchar-t


    【解决方案1】:

    std::regex_iterator 也是类模板

    template<typename CharT>
    std::size_t countMatches(const CharT* find, const CharT* str)
    {
        std::basic_string<CharT> text(str);
        std::basic_regex<CharT> reg(find);
        typedef typename std::basic_string<CharT>::iterator iter_t;
        return distance(std::regex_iterator<iter_t>(text.begin(), text.end(), reg),
                        std::regex_iterator<iter_t>());
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      相关资源
      最近更新 更多