Skip to content
Related Articles

Related Articles

Program to find all match of a regex in a string
  • Difficulty Level : Hard
  • Last Updated : 04 Sep, 2018

Prerequisite: smatch | Regex (Regular Expressions) in C++

Given a regex, the task is to find all regex matches in a string.

  • Without using iterator:




    // C++ program to find all the matches
    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        string subject("My GeeksforGeeks is my " 
                        "GeeksforGeeks none of your GeeksforGeeks");
      
        // Template instantiations for
        // extracting the matching pattern.
        smatch match;
        regex r("GeeksforGeeks");
        int i = 1;
        while (regex_search(subject, match, r)) {
            cout << "\nMatched string is " << match.str(0) << endl
                 << "and it is found at position " 
                 << match.position(0)<<endl; 
            i++;
      
            // suffix to find the rest of the string.
            subject = match.suffix().str();
        }
        return 0;
    }
    Output:
    Matched string is GeeksforGeeks
    and it is found at position 3
    
    Matched string is GeeksforGeeks
    and it is found at position 7
    
    Matched string is GeeksforGeeks
    and it is found at position 14
    

    Note: Above code is running perfectly fine but the problem is input string will be lost.

  • Using iterator:
    Object can be constructed by calling the constructor with three parameters: a string iterator indicating the starting position of the search, a string iterator indicating the ending position of the search, and the regex object. Construct another iterator object using the default constructor to get an end-of-sequence iterator.




    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        string subject("geeksforgeeksabcdefghg"
                       "eeksforgeeksabcdgeeksforgeeks");
      
        // regex object.
        regex re("geeks(for)geeks");
      
        // finding all the match.
        for (sregex_iterator it = sregex_iterator(subject.begin(), subject.end(), re);
             it != sregex_iterator(); it++) {
            smatch match;
            match = *it;
            cout << "\nMatched  string is = " << match.str(0)
                 << "\nand it is found at position "
                 << match.position(0) << endl;
            cout << "Capture " << match.str(1)
                 << " at position " << match.position(1) << endl;
        }
        return 0;
    }
    Output:
    Matched  string is = geeksforgeeks
    and it is found at position 0
    Capture for at position 5
    
    Matched  string is = geeksforgeeks
    and it is found at position 21
    Capture for at position 26
    
    Matched  string is = geeksforgeeks
    and it is found at position 38
    Capture for at position 43
    



My Personal Notes arrow_drop_up
Recommended Articles
Page :