为什么正则表达式*?匹配结果为空?

代码如下

#include <iostream>
#include <regex>

using namespace std;

static void search_by_regex(const char *regex_s,
                            const string &s)
{ // ①
  regex reg_ex(regex_s);
  smatch match_result; // ②
  cout.width(14);      // ③
  if (regex_search(s, match_result, reg_ex))
  {                                                               // ④
    cout << regex_s << ": \"" << match_result[0] << "\"" << endl; // ⑤
  }
}

int main()
{
  string s("_AaBbCcDdEeFfGg12345!@#$% \t"); // ⑥

  search_by_regex("[[:alnum:]]{5}", s);   // ⑦
  search_by_regex("\\w{5,}", s);          // ⑧
  search_by_regex(R"(\W{3,5})", s);       // ⑨zz
  search_by_regex("[[:digit:]]*", s);     // ⑩
  search_by_regex(R"(/[[:digit:]]*)", s); // ⑩
  search_by_regex(".+", s);               // ⑪
  search_by_regex("[[:lower:]]?", s);     // ⑫
  search_by_regex(R"(/[[:lower:]]?/g)", s); // ⑫

  return 0;
}

输出结果

[[:alnum:]]{5}: "AaBbC"
        \w{5,}: "_AaBbCcDdEeFfGg12345"
       \W{3,5}: "!@#$%"
  [[:digit:]]*: ""
            .+: "_AaBbCcDdEeFfGg12345!@#$%     "
  [[:lower:]]?: ""

为什么表达式[[:digit:]]*[[:lower:]]?匹配的输出结果为空呢?
万分感谢!

阅读 2.8k
3 个回答

这两个都可以匹配空串,所以他们都匹配上了(句首的)空串。

因为匹配上了(句首的)空串。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题