c++ - regex_iterators 可以用于自定义字符串类型吗?

标签 c++ regex

我只找到了 regex_iterators 被初始化为

的例子
regex_iterator::<string::iterator>

如果我有一个包含一系列字符的类,例如:

class fooString {
private:
  deque<bar> data;

  // ... other functionality ...
}

其中 bar 是与 std::to_string 兼容的类或结构

如何使 fooStringbar 与正则表达式兼容,以便我可以调用

fooString myFoo = ...
regex e( /* some regex notation */);
regex_iterator::<fooString::iterator> regIt(myFoo.begin(), myFoo.end(), e);

...并能够像处理字符串一样对其进行迭代?


我尝试了以下实验:

    std::deque<int> testDeque { 4, 5, 5, 5, 6, 7 };
    std::regex e("5{1,3}");
    std::regex_iterator<std::deque<int>::iterator> 
    regIt(testDeque.begin(), testDeque.end(), e);

并得到编译错误

1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\regex(2271): error C2027: use of undefined type 'std::regex_traits<_Elem>'
with  
[  
   _Elem=int  
]

所以我认为双向迭代器不够用,因为 deque 符合它,我认为 'bar' 对象需要兼容。但我真的不确定。

最佳答案

fooString 必须满足双向迭代器的要求。 [双向迭代器] cppreference's documentation 非常接近标准措辞,所以您可以照着做。

我将在此处添加相关部分:

  • 迭代器 r 必须同时满足操作 --rr++
    • 这些操作返回对相同类型迭代器的引用
  • *r 必须返回对迭代器正在迭代的类型的引用。
    • a reference type according to what cppreference iterator_traits
    • 列表

如果您的 BidirectionalIterator::value_type 不是标准字符类型(任何您可以制作 std::basic_string 的字符类型,例如 char),你还需要专精 regex_traits ,尽管这已经进入了兔子洞。

关于c++ - regex_iterators 可以用于自定义字符串类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710130/

相关文章:

c++ - 在c++ 20协同例程中co_await的实际实现是什么

C++ 读/写文本文件问题

c++ - if constexpr 似乎只有在两种情况都有效的情况下才有效

javascript - 如何在 Javascript 的正则表达式中使用括号?

C++ LibVLC 可以用吗?

c++ - 是否值得在 Linux 上为 nginx 或 haproxy 的多核服务器试验不同的堆分配器

python - 在 Markdown 中取消/注释掉 html 标签的巧妙方法

regex - 如何让正则表达式 'or groups' 像 (foo|bar) 与 find -regex 一起使用? (操作系统)

javascript - 如何使用正则表达式验证我的文件输入名称?

javascript - 用于从文件中查找和替换特定字符串的正则表达式