[英]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.