C++ c++;11-正则表达式匹配
我正在使用正则表达式从字符串中提取信息C++ c++;11-正则表达式匹配,c++,regex,c++11,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-SP
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])?.*");
这似乎奏效了。我对此不是很有信心,因为我在正则表达式方面没有太多的专业知识。正则表达式正确吗?这可以改进吗 您可以使用
\w{2,}\d
作为正则表达式,匹配长度为2或2以上的任何单词字符组合(\w{2,}
)(以避免在某些字符串的开头匹配j
)或长度为1的数字(\d
)(用于匹配某些字符串末尾的1)
您可以使用sub_match
类模板实现此目的:
正则表达式引擎使用类模板sub_match
来表示由标记的子表达式匹配的字符序列。匹配是由正则表达式匹配的目标范围内的[begin,end]对,但具有额外的观察函数以提高代码清晰度
请注意,您当前允许类似于
-2012.12--
的内容。如果这不是您的目标,请将作为一个整体可选的部分分组。(?:[a-Z])?…
我需要2012,12。基本上我想将字符串拆分为(年、月、sp#、补丁#)。我已经更新了对它的评论。@LightningRacisinObrit我不确定一个只有regex的问题在代码审查中是否会成功。我们可以审查使用它的实现、类或函数,但对于一个基本工具,如regex,我们只能说这么多…@Phrancis:我不同意。我想分成两部分(年、月、SP、补丁).\w+
匹配字母数字,因为年份只是数字,我认为\d+
可能是better@Anand首先,我的方法是查找所有未拆分的匹配项,如果您想SP1
,您不能使用\d+
查看编辑,首先我错过了j
!!我们不想在开始时匹配j
。但是我是否要匹配J-2014.09-SP3-1