c++ - vector 中每个元素的模式匹配

标签 c++ regex glob

我有一个看起来像这样的函数:

bool ExpandWildCard(vector<string>& names, vector<string>& result, string& wildcard) 
{
}

在这里,我想将 wildcard 与 vector names 中的每个元素进行匹配,如果匹配,则将元素添加到 names 中> 到 result vector 。

当然,如果通配符是 *,我可以只添加从 namesresults 的所有内容。另外,我现在只是尝试实现 * 通配符。

我如何在 C++ 中执行此操作?

我想到的一种方法是使用 find() 算法,但我不确定我是否会使用它来匹配通配符?

最佳答案

看起来您正在寻找 std::copy_if 的某种组合也许std::regex_match :

bool ExpandWildCard(vector<string>& names, vector<string>& result, string& wildcard) {
  auto oldsize = result.size();
  std::copy_if(std::begin(names), std::end(names),
    std::back_inserter(result),
    [&](string const& name) {
      return std::regex_match(name, make_regex(wildcard));
    }
  );

  return (result.size() > oldsize);
}

make_regex 是您需要实现的将字符串转换为 std::regex 的函数。

关于c++ - vector 中每个元素的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120547/

相关文章:

autocomplete - zsh 文件名通配/替换

python glob匹配更广泛的范围

javascript - 删除两个字符串正则表达式之间的所有内容

c++ - 如何在 C++ 中解析具有不同字段数的行

c++ - Qt Segmentation Fault QTableWidget->SetItem(int,int,QTableWidgetItem)

c++ - 一条定义规则 : Can corresponding entities have different names?

正则表达式仅匹配包含序列的任何单词一次

regex - Sublime 的多行xml正则表达式

CMake 通配生成的文件

c++ - 我们可以重新定义正则表达式吗?