正则表达式C:提取子字符串
发布时间:2020-12-14 06:28:43 所属栏目:百科 来源:网络整理
导读:我想提取两个之间的子串. 例如:/home/toto/FILE_mysymbol_EVENT.DAT 或只是FILE_othersymbol_EVENT.DAT 我想得到:mysymbol和othersymbol 我不想使用boost或其他libs.只是来自C的标准内容,除了CERN的ROOT lib,还有TRegexp,但是我不知道如何使用它 自去年以
我想提取两个之间的子串.
例如:/home/toto/FILE_mysymbol_EVENT.DAT 或只是FILE_othersymbol_EVENT.DAT 我想得到:mysymbol和othersymbol 我不想使用boost或其他libs.只是来自C的标准内容,除了CERN的ROOT lib,还有TRegexp,但是我不知道如何使用它
自去年以来,C已经将正式表达式纳入标准.该程序将显示如何使用它们来提取您以后的字符串:
#include <regex> #include <iostream> int main() { const std::string s = "/home/toto/FILE_mysymbol_EVENT.DAT"; std::regex rgx(".*FILE_(w+)_EVENT.DAT.*"); std::smatch match; if (std::regex_search(s.begin(),s.end(),match,rgx)) std::cout << "match: " << match[1] << 'n'; } 它将输出: match: mysymbol 应该注意的是,它不会在GCC中起作用,因为它对正则表达式的图书馆支持不是很好.在VS2010(可能VS2012)中运行良好,并且应该在clang工作. 到目前为止(2016年底),所有现代化的C编译器及其标准库都与C11标准完全兼容,大部分(如果不是全部)C 14也是如此. GCC 6和即将到来的Clang 4也支持即将到来的C 17标准. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |