我有以下字符串:E:\501_Document_60_1_R.xml
我正在尝试找到模式"_R"
我使用以下内容:boost::regex rgx("[R]");
但它不起作用:“清空匹配”
谢谢。代码:
vector<string> findMono(string s)
{
vector<string> vec;
boost::regex rgx("[R]");
boost::smatch match;
boost::sregex_iterator begin {s.begin(), s.end(), rgx},
end {};
for (boost::sregex_iterator& i = begin; i != end; ++i)
{
boost::smatch m = *i;
vec.push_back(m.str());
}
return vec;
}
int maint()
{
vector<string> m = findMono("E:\501_Document_60_1_R.xml");
if(m.size() > 0) cout << "Match" << endl;
else cout << "No Match" << endl;
return 0;
}
答案 0 :(得分:2)
正如我们在评论中所讨论的那样,"_R"
在技术上将根据您当前的数据集为您的正则表达式工作。
但是,我强烈考虑更复杂的事情,以避免在路径包含其他地方的序列"_R"
时遇到问题。保护自己免受这个问题的影响相当容易,这是很好的一般做法,而且很可能会避免将来出现错误。
这是一个非常基本的工作示例:
#include <iostream>
#include <string>
#include <vector>
#include <boost/regex.hpp>
std::vector<std::string> findMono(const std::string& path)
{
boost::regex rgx("_R");
boost::sregex_iterator begin {path.begin(), path.end(), rgx}, end {};
std::vector<std::string> matches;
for (boost::sregex_iterator& i = begin; i != end; ++i) {
matches.push_back((*i).str());
}
return matches;
}
int main(int argc, char * argv[])
{
const std::string path = "E:\\501_Document_60_1_R.xml";
const std::vector<std::string>& matches = findMono(path);
for (const auto& match : matches) {
std::cout << match << std::endl;
}
return 0;
}