C ++正则表达式匹配和模式捕获

时间:2015-01-02 14:30:35

标签: c++ regex

正则表达式在我熟悉的脚本语言中非常简单,如bash和perl。但是我在C ++中并不擅长这个。

这就是我想要的:

如果字符串与此模式leg[0-9]+_.*匹配,则从第一个_字符开始捕获所有内容。有人能告诉我一个如何做到这一点的基本例子吗?我已经看到了一些匹配的例子,但没有任何东西向我展示如何提取子模式。

由于

编辑:没有std :: regex有没有办法做到这一点?我受限于早期版本的gcc,pre-C ++ 11

1 个答案:

答案 0 :(得分:0)

考虑到你使用std :: regex的限制,我认为下一个选择是sscanf。

char result [64];
sscanf (input, "leg%*[0-9]%63c", result);

这匹配“leg”后跟任意数字的数字,但是(感谢星号)不会将任何内容分配给任何内容。然后它将余数(最多63个字符)读入结果。明显的缺点是结果是char而不是std :: string的数组,以及很多人不熟悉scanf scanset转换的事实。第三个潜在的缺点是扫描集中的“0-9”在技术上没有定义 - 但基本上所有编译器都以明显的方式解释它。如果您需要严格的便携性,请使用“0123456789”。