c-resources/CPlusPlus20ForProgrammers-m.../examples/ch08/fig08_16.cpp

83 lines
3.7 KiB
C++

// fig08_16.cpp
// Matching entire strings to regular expressions.
#include <fmt/format.h>
#include <iostream>
#include <regex>
int main() {
// fully match a pattern of literal characters
std::regex r1{"02215"};
std::cout << "Matching against: 02215\n"
<< fmt::format("02215: {}; 51220: {}\n\n",
std::regex_match("02215", r1), std::regex_match("51220", r1));
// fully match five digits
std::regex r2{R"(\d{5})"};
std::cout << R"(Matching against: \d{5})" << "\n"
<< fmt::format("02215: {}; 9876: {}\n\n",
std::regex_match("02215", r2),
std::regex_match("9876", r2));
// match a word that starts with a capital letter
std::regex r3{"[A-Z][a-z]*"};
std::cout << "Matching against: [A-Z][a-z]*\n"
<< fmt::format("Wally: {}; eva: {}\n\n",
std::regex_match("Wally", r3), std::regex_match("eva", r3));
// match any character that's not a lowercase letter
std::regex r4{"[^a-z]"};
std::cout << "Matching against: [^a-z]\n"
<< fmt::format("A: {}; a: {}\n\n",
std::regex_match("A", r4), std::regex_match("a", r4));
// match metacharacters as literals in a custom character class
std::regex r5{"[*+$]"};
std::cout << "Matching against: [*+$]\n"
<< fmt::format("*: {}; !: {}\n\n",
std::regex_match("*", r5), std::regex_match("!", r5));
// matching a capital letter followed by at least one lowercase letter
std::regex r6{"[A-Z][a-z]+"};
std::cout << "Matching against: [A-Z][a-z]+\n"
<< fmt::format("Wally: {}; E: {}\n\n",
std::regex_match("Wally", r6), std::regex_match("E", r6));
// matching zero or one occurrences of a subexpression
std::regex r7{"labell?ed"};
std::cout << "Matching against: labell?ed\n"
<< fmt::format("labelled: {}; labeled: {}; labellled: {}\n\n",
std::regex_match("labelled", r7),
std::regex_match("labeled", r7),
std::regex_match("labellled", r7));
// matching n (3) or more occurrences of a subexpression
std::regex r8{R"(\d{3,})"};
std::cout << R"(Matching against: \d{3,})" << "\n"
<< fmt::format("123: {}; 1234567890: {}; 12: {}\n\n",
std::regex_match("123", r8),
std::regex_match("1234567890", r8),
std::regex_match("12", r8));
// matching n to m inclusive (3-6), occurrences of a subexpression
std::regex r9{R"(\d{3,6})"};
std::cout << R"(Matching against: \d{3,6})" << "\n"
<< fmt::format("123: {}; 123456: {}; 1234567: {}; 12: {}\n",
std::regex_match("123", r9), std::regex_match("123456", r9),
std::regex_match("1234567", r9), std::regex_match("12", r9));
}
/**************************************************************************
* (C) Copyright 1992-2022 by Deitel & Associates, Inc. and *
* Pearson Education, Inc. All Rights Reserved. *
* *
* DISCLAIMER: The authors and publisher of this book have used their *
* best efforts in preparing the book. These efforts include the *
* development, research, and testing of the theories and programs *
* to determine their effectiveness. The authors and publisher make *
* no warranty of any kind, expressed or implied, with regard to these *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or *
* consequential damages in connection with, or arising out of, the *
* furnishing, performance, or use of these programs. *
**************************************************************************/