123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #include <iostream>
- #include <regex>
- #include <string>
- using namespace std;
- int main() {
- string input;
-
- regex integer("(\\+|-)?([[:digit:]]+)");
- smatch match;
-
- while (true) {
- cout << "Give me an integer! (q to quit)" << endl;
- getline(cin, input);
-
- if (!cin)
- break;
-
- if (input == "q")
- break;
-
- cout << "Length: " << input.length() << " Empty? " << input.empty() << endl;
- if (input.empty())
- break;
-
- vector<pair<int,int>> pos_len;
- for (auto it = sregex_iterator(input.begin(), input.end(), integer);
- it != sregex_iterator(); ++it) {
- pos_len.push_back(make_pair(it->position(), it->length() ) );
- cout << it->position() << " " << it->length() << " : " << it->str()
- << endl;
- }
- for (vector<pair<int,int>>::iterator vit = pos_len.begin(); vit != pos_len.end(); ++vit ) {
- pair<int,int> p;
- p = *vit;
- cout << (*vit).first << "," << (*vit).second << endl;
- cout << p.first << "," << p.second << endl;
- }
- #ifdef RX1
- if (regex_match(input, match, integer)) {
- cout << "integer" << endl;
- for (int i = 0; i < match.size(); ++i) {
- std::cout << "match " << i << " (" << match[i] << ") At "
- << match.position(i) << " of " << match.length(i) << " chars."
- << endl;
- }
- for (smatch::iterator im = match.begin(); im != match.end(); ++im) {
- cout << "matches:" << *im << std::endl;
- }
- } else {
- cout << "Invalid input" << endl;
- }
- int offset = 0;
- while (regex_search(input, match, integer)) {
- cout << "input: [" << input << "]" << endl;
- cout << offset << " match len " << match.length(0) << endl;
- for (int i = 0; i < match.size(); ++i) {
- std::cout << "match " << i << " (" << match[i] << ") At "
- << offset + match.position(i) << " of " << match.length(i)
- << " chars." << endl;
- }
- for (auto x : match) {
- cout << x << " ";
- }
- cout << endl;
- input = match.suffix().str();
- offset += match.length(0) + match.prefix(0).size();
- }
- #endif
- }
- }
|