C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- std::sub_match
- std::match_results
- std::basic_regex
- std::regex_search
- std::regex_replace
- std::regex_iterator
- std::regex_match
- std::regex_token_iterator
- std::regex_error
- std::regex_traits
- std::regex_constants::syntax_option_type
- std::regex_constants::match_flag_type
- std::regex_constants::error_type
- æ¹ ECMAScript æ£åè¡¨è¾¾å¼ææ³
- 注é
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå > æ£å表达å¼åº
æ£å表达å¼åº
| å®ä¹äºå¤´æä»¶
<regex> |
æ£å表达å¼åºæä¾è¡¨ç¤ºæ£å表达å¼çç±»ï¼æ£åè¡¨è¾¾å¼æ¯ä¸ç§ç¨äºå¨å符串ä¸å¹é 模å¼çå¾®åè¯è¨ãä¸åæ°ç§å¯¹è±¡ä¸çæä½è½å»ç»å 乿æå¸¦æ£å表达å¼çæä½ï¼
- ç®æ åºåã为模å¼èæç´¢å°çå符åºåãè¿å¯ä»¥æ¯äºä¸ªè¿ä»£å¨ææå®çèå´ãç©ºç»æ¢å符串æä¸ä¸ª std::string ã
- 模å¼ãè¿æ¯æ£å表达å¼èªèº«ãå®ç¡®å®ææå¹é è ã宿¯ä»å¸¦ç¹å®è¯æ³çå符串ææç std::basic_regex ç±»å对象ã忝æçè¯æ³åä½çæè¿°è§ syntax_option_type ã
- å¹é çæ°ç»ãå ³äºå¹é çä¿¡æ¯å¯ä½ä¸º std::match_results ç±»å对象è·åã
- æ¿æ¢å符串ãè¿æ¯ç¡®å®å¦ä½æ¿æ¢å¹é çå符串ï¼åæ¯æçè¯æ³åä½çæè¿°è§ match_flag_type ã
主类
è¿äºç±»å°è£ æ£å表达å¼åå¨å符çç®æ åºåä¸å¹é æ£å表达å¼çç»æã
| (C++11) |
æ£å表达å¼å¯¹è±¡ (类模æ¿) |
| (C++11) |
æ è¯åè¡¨è¾¾å¼æå¹é
çå符åºå (类模æ¿) |
| (C++11) |
æ è¯ä¸ä¸ªæ£å表达å¼å¹é
ï¼å
嫿æå表达å¼å¹é
(类模æ¿) |
ç®æ³
è¿äºç®æ³å°å°è£ äº regex çæ£å表达å¼åºç¨å°å符çç®æ åºåã
| (C++11) |
å°è¯å¹é
ä¸ä¸ªæ£å表达å¼å°æ´ä¸ªå符åºå (彿°æ¨¡æ¿) |
| (C++11) |
å°è¯å¹é
ä¸ä¸ªæ£å表达å¼å°å符åºåçä»»ä½é¨å (彿°æ¨¡æ¿) |
| (C++11) |
ä»¥æ ¼å¼åçæ¿æ¢ææ¬æ¥æ¿æ¢æ£å表达å¼å¹é
çåºç°ä½ç½® (彿°æ¨¡æ¿) |
è¿ä»£å¨
regex_iterator ç¨äºéåå¨åºå䏿¾å°çå¹é æ£å表达å¼çæ´ä¸ªéåã
| (C++11) |
è¿ä»£ä¸ä¸ªå符åºåä¸çæææ£å表达å¼å¹é
(类模æ¿) |
| (C++11) |
è¿ä»£ç»å®å符串ä¸çæææ£å表达å¼å¹é
ä¸çæå®å表达å¼ï¼æè¿ä»£æªå¹é
çåå符串 (类模æ¿) |
å¼å¸¸
æ¤ç±»å®ä¹ä½ä¸ºå¼å¸¸æåºä»¥æ¥åæ¥èªæ£å表达å¼åºé误çç±»åã
| (C++11) |
æ¥åæ£å表达å¼åºçæçé误 (ç±») |
ç¹æ§
regex_traits ç±»ç¨äºå°è£ regex çæ¬å°åæ¹é¢ã
| (C++11) |
æä¾æ£å表达å¼åºæéçå
³äºå符类åçå
ä¿¡æ¯ (类模æ¿) |
常é
| å®ä¹äºå½å空é´
std::regex_constants | |
| (C++11) |
æ§å¶æ£å表达å¼è¡ä¸ºçéç¨é项 (typedef) |
| (C++11) |
ç¹å®äºå¹é
çé项 (typedef) |
| (C++11) |
æè¿°ä¸åç±»åçå¹é
é误 (typedef) |
示ä¾
è¿è¡æ¤ä»£ç
#include <iostream> #include <iterator> #include <string> #include <regex> Â int main() { std::string s = "Some people, when confronted with a problem, think " "\"I know, I'll use regular expressions.\" " "Now they have two problems."; Â std::regex self_regex("REGULAR EXPRESSIONS", std::regex_constants::ECMAScript | std::regex_constants::icase); if (std::regex_search(s, self_regex)) { std::cout << "Text contains the phrase 'regular expressions'\n"; } Â std::regex word_regex("(\\w+)"); auto words_begin = std::sregex_iterator(s.begin(), s.end(), word_regex); auto words_end = std::sregex_iterator(); Â std::cout << "Found " << std::distance(words_begin, words_end) << " words\n"; Â const int N = 6; std::cout << "Words longer than " << N << " characters:\n"; for (std::sregex_iterator i = words_begin; i != words_end; ++i) { std::smatch match = *i; std::string match_str = match.str(); if (match_str.size() > N) { std::cout << " " << match_str << '\n'; } } Â std::regex long_word_regex("(\\w{7,})"); std::string new_s = std::regex_replace(s, long_word_regex, "[$&]"); std::cout << new_s << '\n'; }
è¾åºï¼
Text contains the phrase 'regular expressions' Found 20 words Words longer than 6 characters: confronted problem regular expressions problems Some people, when [confronted] with a [problem], think "I know, I'll use [regular] [expressions]." Now they have two [problems].