0

我有以下字符串: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;
}
4

1 回答 1

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;
}
于 2013-08-15T15:14:37.810 回答