[英]c++11 - regex matching
我正在使用正则表达式从字符串中提取信息。
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或更长的单词字符组合( \\w{2,}
)(以避免匹配某些字符串开头的j
)或长度为1( \\d
)的数字(用于匹配某些字符串末尾的1)!
您可以使用sub_match
类模板实现此目标:
正则表达式引擎使用类模板
sub_match
来表示由标记的子表达式匹配的字符序列。 匹配是由正则表达式匹配的目标范围内的[开始,结束]对,但具有额外的观察者函数以增强代码清晰度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.