正则表达式在我熟悉的脚本语言中非常简单,如bash和perl。但是我在C ++中并不擅长这个。
这就是我想要的:
如果字符串与此模式leg[0-9]+_.*
匹配,则从第一个_
字符开始捕获所有内容。有人能告诉我一个如何做到这一点的基本例子吗?我已经看到了一些匹配的例子,但没有任何东西向我展示如何提取子模式。
由于
编辑:没有std :: regex有没有办法做到这一点?我受限于早期版本的gcc,pre-C ++ 11答案 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”。