Namespaces
Variants
Views
Actions

Regular expressions library

From cppreference.com
< cpp
Revision as of 15:49, 22 January 2013 by Nate (Talk | contribs)

Defined in header <regex>

The regular expressions library provides a class that represents regular expressions, which are a kind of mini-language used to perform pattern matching within strings.

Also provided in the regular expressions library are utility classes that provide support for various algorithms, iterators, exceptions, and type traits.

Contents

Main classes

These classes encapsulate a regular expression and the results of matching a regular expression within a target sequence of characters.

Template:cpp/regex/dcl list basic regexTemplate:cpp/regex/dcl list sub matchTemplate:cpp/regex/dcl list match results

Algorithms

These functions are used to apply the regular expression encapsulated in a regex to a target sequence of characters.

Template:cpp/regex/dcl list regex matchTemplate:cpp/regex/dcl list regex searchTemplate:cpp/regex/dcl list regex replace

Iterators

The regex iterators are used to traverse the entire set of regular expression matches found within a sequence.

Template:cpp/regex/dcl list regex iteratorTemplate:cpp/regex/dcl list regex token iterator

Exceptions

This class defines the type of objects thrown as exceptions to report errors from the regular expressions library.

Template:cpp/regex/dcl list regex error

Traits

The regex traits class is used to encapsulate the localizable aspects of a regex.

Template:cpp/regex/dcl list regex traits

Constants

Template:cpp/regex/dcl list syntax option typeTemplate:cpp/regex/dcl list match flag typeTemplate:cpp/regex/dcl list error type
Defined in namespace std::regex_constants

Example

#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("(\\S+)");
    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 greater 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';
}

Output:

Text contains the phrase 'regular expressions'
Found 19 words
Words greater than 6 characters:
  people,
  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].