我想在另外两个之间提取一个子串.
前:/home/toto/FILE_mysymbol_EVENT.DAT
或者只是FILE_othersymbol_EVENT.DAT
我希望得到:mysymbol
和othersymbol
我不想使用boost或其他库.只是来自C++的标准内容,除了CERN的ROOT lib,还有TRegexp,但我不知道如何使用它...
Som*_*ude 35
从去年开始,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';
}
Run Code Online (Sandbox Code Playgroud)
它将输出:
match: mysymbol
应该注意的是,它在GCC中不起作用,因为它对正则表达式的库支持不是很好.在VS2010(可能是VS2012)中运行良好,并且应该在clang中工作.
到现在为止(2016年末),所有现代C++编译器及其标准库都完全符合C++ 11标准,并且大多数(如果不是全部)C++ 14也是如此.GCC 6和即将推出的Clang 4也支持大部分即将推出的C++ 17标准.
归档时间: |
|
查看次数: |
33559 次 |
最近记录: |