regex 如何使用C++11正则表达式匹配字符串和通配符

k5hmc34c  于 2023-01-21  发布在  其他
关注(0)|答案(2)|浏览(212)

这是静态字符串列表,它只在字符串的开始或结尾使用通配符。没有任何其他正则表达式规则。AAAA, BBBB*, *CCCC, *DDDD*。我需要找到一个给定的字符串匹配任何字符串在这个列表中。我正在寻找这样的东西。

bool isMatch(std::string str)
{
  std::vector<string> my_list = {AAAA, BBBB*, *CCCC, *DDDD*};
  if(str.matchAny(my_list))
    return true;

  return false;
}

我不喜欢使用像boost这样的第三方软件。你觉得C++11std::regex就能做到吗?还是有其他简单的方法?

blmhpbnm

blmhpbnm1#

正则表达式在这里显得有些多余,只需在适当的位置查找每个字符序列即可:

str == "AAAA"

str.find("BBBB") == 0

str.find("CCCC") == str.size() - 4

str.find("DDDD") != std::string::npos
hgqdbh6s

hgqdbh6s2#

我通常是这样做的,我用".*"替换"\\*",用"."替换"\\?"
下面是它的C++代码。

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    regex star_replace("\\*");
    regex questionmark_replace("\\?");
    
    string data = "AAAABBBCCDDDD";
    string pattern = "*CC*";
    
    auto wildcard_pattern = regex_replace(
            regex_replace(pattern, star_replace, ".*"),
                questionmark_replace, ".");
    
    cout << "Wildcard: " << pattern << " Regex: " << wildcard_pattern << endl;
    
    regex wildcard_regex("^" + wildcard_pattern + "$");
    
    if (regex_match(data, wildcard_regex))
        cout << "Match!" << endl;
    else
        cout << "No match!" << endl;

    return 0;
}

下面是一个link,用于在onlinegdb上运行代码

相关问题