在字符串正则表达式c++中查找模式
find pattern in string regular expression c++
我有以下字符串: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;
}
正如我们在评论中所讨论的,在给定当前数据集的情况下,"_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;
}
相关文章:
- 在C++的一系列数字中查找重复模式
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 在数组中查找重复模式
- 在图像中查找相似的(大)模式
- 在C++中查找文本中的模式
- 扫描位数组以查找多个位的模式
- 在数组中查找模式的最有效方法?
- 为什么 POSIX 允许在现有文件末尾 (fseek) 之外查找只读模式
- 编写模式识别'函数以查找特定顺序出现的数字?C++
- 查找模式C++
- 从列表到数组C 查找模式或最常见的数字
- 使用双阵列查找模式
- 查找整数中的重复模式
- 查找未排序数组的模式,以及该数组是否具有多个模式或无模式
- 如何通过将数组的指针传递给函数来查找数组的模式?C++
- 使用 bin 搜索查找排序数组的模式
- 在数组中查找一个或多个模式
- 如何在虚幻编辑器内容浏览器中查找虚幻游戏模式
- 在具有重复项的长数据序列的滚动窗口中查找模式
- 在字符串正则表达式c++中查找模式