c ++ 11 - 正则表达式匹配

时间:2015-04-24 15:40:49

标签: c++ regex c++11

我使用正则表达式从字符串中提取信息。

  auto version = { // comments shows the expected output
    // version         // output : (year, month, sp#, patch#)
    "2012.12",         // "2012", "12", "", ""
    "2012.12-1",       // "2012", "12", "", "1" 
    "2012.12-SP1",     // "2012", "12", "SP1", "" 
    "2012.12-SP2-1",   // "2012", "12", "SP2", "1" 
    "I-2013.12-2",     // "2013", "12", "", "2"
    "J-2014.09",       // "2014", "09", "", ""
    "J-2014.09-SP2-1", // "2014", "09", "SP2", "1"
};

我的正则表达式如下:

    //                  J   -  2014       .  09      -  SP2      -  1  
std::regex regexExpr("[A-Z]?-?([0-9]{4})\\.([0-9]{2})-?(SP[1-9])?-?([1-9])?.*");

这似乎有效well。我对此并不十分自信,因为我对正则表达式没有太多的专业知识。正则表达式是正确的,可以改进吗?

1 个答案:

答案 0 :(得分:2)

你可以使用\w{2,}|\d作为你的正则表达式,匹配任何长度为2或更长的单词字符组合(\w{2,})(以避免匹配某些开头的j字符串)或长度为1(\d)的数字(用于匹配某些字符串末尾的1)!

Demo

您可以使用sub_match课程模板实现此目标:

  

正则表达式引擎使用类模板sub_match来表示由标记的子表达式匹配的字符序列。匹配是由正则表达式匹配的目标范围内的[开始,结束]对,但具有额外的观察者函数以增强代码清晰度。

相关问题