mfc_example.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 163 行

CPP
163
字号
/* * * Copyright (c) 2004 * John Maddock * * Use, modification and distribution are subject to the  * Boost Software License, Version 1.0. (See accompanying file  * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) * */ /*  *   LOCATION:    see http://www.boost.org for most recent version.  *   FILE         mfc_example.cpp  *   VERSION      see <boost/version.hpp>  *   DESCRIPTION: examples of using Boost.Regex with MFC and ATL string types.  */#ifdef TEST_MFC#include <boost/regex/mfc.hpp>#include <cstringt.h>#include <atlstr.h>#include <assert.h>#include <tchar.h>#include <iostream>#ifdef _UNICODE#define cout wcout#endif//// Find out if *password* meets our password requirements,// as defined by the regular expression *requirements*.//bool is_valid_password(const CString& password, const CString& requirements){   return boost::regex_match(password, boost::make_regex(requirements));}//// Extract filename part of a path from a CString and return the result// as another CString://CString get_filename(const CString& path){   boost::tregex r(__T("(?:\\A|.*\\\\)([^\\\\]+)"));   boost::tmatch what;   if(boost::regex_match(path, what, r))   {      // extract $1 as a CString:      return CString(what[1].first, what.length(1));   }   else   {      throw std::runtime_error("Invalid pathname");   }}CString extract_postcode(const CString& address){   // searches throw address for a UK postcode and returns the result,   // the expression used is by Phil A. on www.regxlib.com:   boost::tregex r(__T("^(([A-Z]{1,2}[0-9]{1,2})|([A-Z]{1,2}[0-9][A-Z]))\\s?([0-9][A-Z]{2})$"));   boost::tmatch what;   if(boost::regex_search(address, what, r))   {      // extract $0 as a CString:      return CString(what[0].first, what.length());   }   else   {      throw std::runtime_error("No postcode found");   }}void enumerate_links(const CString& html){   // enumerate and print all the <a> links in some HTML text,   // the expression used is by Andew Lee on www.regxlib.com:   boost::tregex r(__T("href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']"));   boost::tregex_iterator i(boost::make_regex_iterator(html, r)), j;   while(i != j)   {      std::cout << (*i)[1] << std::endl;      ++i;   }}void enumerate_links2(const CString& html){   // enumerate and print all the <a> links in some HTML text,   // the expression used is by Andew Lee on www.regxlib.com:   boost::tregex r(__T("href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']"));   boost::tregex_token_iterator i(boost::make_regex_token_iterator(html, r, 1)), j;   while(i != j)   {      std::cout << *i << std::endl;      ++i;   }}//// Take a credit card number as a string of digits, // and reformat it as a human readable string with "-"// separating each group of four digits://const boost::tregex e(__T("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"));const CString human_format = __T("$1-$2-$3-$4");CString human_readable_card_number(const CString& s){   return boost::regex_replace(s, e, human_format);}int main(){   // password checks using regex_match:   CString pwd = "abcDEF---";   CString pwd_check = "(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}";   bool b = is_valid_password(pwd, pwd_check);   assert(b);   pwd = "abcD-";   b = is_valid_password(pwd, pwd_check);   assert(!b);   // filename extraction with regex_match:   CString file = "abc.hpp";   file = get_filename(file);   assert(file == "abc.hpp");   file = "c:\\a\\b\\c\\d.h";   file = get_filename(file);   assert(file == "d.h");   // postcode extraction with regex_search:   CString address = "Joe Bloke, 001 Somestreet, Somewhere,\nPL2 8AB";   CString postcode = extract_postcode(address);   assert(postcode = "PL2 8NV");   // html link extraction with regex_iterator:   CString text = "<dt><a href=\"syntax_perl.html\">Perl Regular Expressions</a></dt><dt><a href=\"syntax_extended.html\">POSIX-Extended Regular Expressions</a></dt><dt><a href=\"syntax_basic.html\">POSIX-Basic Regular Expressions</a></dt>";   enumerate_links(text);   enumerate_links2(text);   CString credit_card_number = "1234567887654321";   credit_card_number = human_readable_card_number(credit_card_number);   assert(credit_card_number == "1234-5678-8765-4321");   return 0;}#else#include <iostream>int main(){   std::cout << "<NOTE>MFC support not enabled, feature unavailable</NOTE>";   return 0;}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?