C++ C++;正则表达式匹配和模式捕获
正则表达式在我熟悉的脚本语言(如bash和perl)中非常简单。但是我在C++中不是那么擅长。 这就是我想要的:C++ C++;正则表达式匹配和模式捕获,c++,regex,C++,Regex,正则表达式在我熟悉的脚本语言(如bash和perl)中非常简单。但是我在C++中不是那么擅长。 这就是我想要的: 如果字符串与此模式匹配,则捕获从第一个字符开始的所有内容。有人能给我举一个基本的例子来说明如何做到这一点吗?我看到了一些匹配的示例,但没有说明如何提取子模式 谢谢 编辑:没有std::regex有没有办法做到这一点?我受到早期版本的gcc的限制,即C++11之前的版本,考虑到您使用std::regex的限制,我认为下一个选择是sscanf char result [64]; ssca
如果字符串与此模式匹配,则捕获从第一个
字符开始的所有内容。有人能给我举一个基本的例子来说明如何做到这一点吗?我看到了一些匹配的示例,但没有说明如何提取子模式
谢谢
编辑:没有std::regex有没有办法做到这一点?我受到早期版本的gcc的限制,即C++11之前的版本,考虑到您使用std::regex的限制,我认为下一个选择是sscanf
char result [64];
sscanf (input, "leg%*[0-9]%63c", result);
这与后跟任意数字的“leg”相匹配,但(多亏了星号)不会将任何数字指定给任何东西。然后它将剩余部分(最多63个字符)读入结果。明显的缺点是,结果是一个char数组而不是std::string,而且许多人不熟悉scanf扫描集转换。第三个潜在缺点是扫描集中的“0-9”在技术上没有定义——但本质上所有编译器都以显而易见的方式对其进行解释。如果您需要严格的可移植性,请使用“0123456789”来代替。
leg[0-9]+\uU9++(.*)
然后抓取捕获,看看参考资料,值得一提的是,std::regex
只是c++11标准(op没有标记)。在gcc 4.9Thank@AbhishekGuptaI之前它是不可用的。我猜您最好使用第三方正则表达式库,或者只使用while/for循环编写它,以进行一般字符串操作。如果你不知道发生了什么,像这样的事情可能会被证明是鼓舞人心的。