# Glib::Regex Class Reference

Perl-compatible regular expressions - matches strings against regular expressions. More...

`#include <glibmm/regex.h>`

List of all members.

## Public Member Functions

void | reference () const
| Increment the reference count for this object.
void | unreference () const
| Decrement the reference count for this object.
GRegex* | gobj ()
| Provides access to the underlying C instance.
const GRegex* | gobj () const
| Provides access to the underlying C instance.
GRegex* | gobj_copy () const
| Provides access to the underlying C instance. The caller is responsible for unrefing it. Use when directly setting fields in structs.
Glib::ustring | get_pattern () const
| Gets the pattern string associated with regex, i.e. a copy of the string passed to g_regex_new().
int | get_max_backref () const
| Returns the number of the highest back reference in the pattern, or 0 if the pattern does not contain back references.
int | get_capture_count () const
| Returns the number of capturing subpatterns in the pattern.
int | get_string_number (const Glib::ustring& name) const
| Retrieves the number of the subexpression named name.
RegexCompileFlags | get_compile_flags () const
| Returns the compile options that regex was created with.
RegexMatchFlags | get_match_flags () const
| Returns the match options that regex was created with.
bool | match (const Glib::ustring&string, RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0))
bool | match (const Glib::ustring&string, int start_position, RegexMatchFlags match_options)
bool | match (const Glib::ustring&string, gssize string_len, int start_position, RegexMatchFlags match_options)
bool | match_all (const Glib::ustring&string, RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0))
bool | match_all (const Glib::ustring&string, int start_position, RegexMatchFlags match_options)
bool | match_all (const Glib::ustring&string, gssize string_len, int start_position, RegexMatchFlags match_options)
Glib::StringArrayHandle | split (const Glib::ustring&string, RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0))
| Breaks the string on the pattern, and returns an array of the tokens.
Glib::StringArrayHandle | split (const gchar*string, gssize string_len, int start_position, RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0), int max_tokens=0) const
| Breaks the string on the pattern, and returns an array of the tokens.
Glib::StringArrayHandle | split (const Glib::ustring&string, int start_position, RegexMatchFlags match_options, int max_tokens) const
Glib::ustring | replace (const gchar*string, gssize string_len, int start_position, const Glib::ustring& replacement, RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0))
| Replaces all occurrences of the pattern in regex with the replacement text.
Glib::ustring | replace (const Glib::ustring&string, int start_position, const Glib::ustring& replacement, RegexMatchFlags match_options)
Glib::ustring | replace_literal (const gchar*string, gssize string_len, int start_position, const Glib::ustring& replacement, RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0))
| Replaces all occurrences of the pattern in regex with the replacement text.
Glib::ustring | replace_literal (const Glib::ustring&string, int start_position, const Glib::ustring& replacement, RegexMatchFlags match_options)
Glib::ustring | replace_eval (const Glib::ustring&string, gssize string_len, int start_position, RegexMatchFlags match_options, GRegexEvalCallback eval, gpointer user_data)
| Replaces occurrences of the pattern in regex with the output of eval for that occurrence.

## Static Public Member Functions

static Glib::RefPtr< Glib::Regex > | create (const Glib::ustring& pattern, RegexCompileFlags compile_options=static_cast< RegexCompileFlags >(0), RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0))
static Glib::ustring | escape_string (const Glib::ustring&string)
static bool | match_simple (const Glib::ustring& pattern, const Glib::ustring&string, RegexCompileFlags compile_options=static_cast< RegexCompileFlags >(0), RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0))
| Scans for a match in string for pattern.
static Glib::StringArrayHandle | split_simple (const Glib::ustring& pattern, const Glib::ustring&string, RegexCompileFlags compile_options=static_cast< RegexCompileFlags >(0), RegexMatchFlags match_options=static_cast< RegexMatchFlags >(0))
| Breaks the string on the pattern, and returns an array of the tokens.
static bool | check_replacement (const Glib::ustring& replacement, gboolean* has_references)
| Checks whether replacement is a valid replacement string (see g_regex_replace()), i.e. that all escape sequences in it are valid.

## Protected Member Functions

| Regex ()
void | operator delete (void*, size_t)

## Related Functions

(Note that these are not member functions.)
Glib::RefPtr< Glib::Regex > | wrap (GRegex* object, bool take_copy=false)
| A Glib::wrap() method for this object.

## Detailed Description

Perl-compatible regular expressions - matches strings against regular expressions.

The Glib::Regex functions implement regular expression pattern matching using syntax and semantics similar to Perl regular expression.

Some functions accept a start_position argument, setting it differs from just passing over a shortened string and setting REGEX_MATCH_NOTBOL in the case of a pattern that begins with any kind of lookbehind assertion. For example, consider the pattern "\Biss\B" which finds occurrences of "iss" in the middle of words. ("\B" matches only if the current position in the subject is not a word boundary.) When applied to the string "Mississipi" from the fourth byte, namely "issipi", it does not match, because "\B" is always false at the start of the subject, which is deemed to be a word boundary. However, if the entire string is passed , but with start_position set to 4, it finds the second occurrence of "iss" because it is able to look behind the starting point to discover that it is preceded by a letter.

Note that, unless you set the REGEX_RAW flag, all the strings passed to these functions must be encoded in UTF-8. The lengths and the positions inside the strings are in bytes and not in characters, so, for instance, "\xc3\xa0" (i.e. "à") is two bytes long but it is treated as a single character. If you set REGEX_RAW the strings can be non-valid UTF-8 strings and a byte is treated as a character, so "\xc3\xa0" is two bytes and two characters long.

When matching a pattern, "\n" matches only against a "\n" character in the string, and "\r" matches only a "\r" character. To match any newline sequence use "\R". This particular group matches either the two-character sequence CR + LF ("\r\n"), or one of the single characters LF (linefeed, U+000A, "\n"), VT (vertical tab, U+000B, "\v"), FF (formfeed, U+000C, "\f"), CR (carriage return, U+000D, "\r"), NEL (next line, U+0085), LS (line separator, U+2028), or PS (paragraph separator, U+2029).

The behaviour of the dot, circumflex, and dollar metacharacters are affected by newline characters, the default is to recognize any newline character (the same characters recognized by "\R"). This can be changed with REGEX_NEWLINE_CR, REGEX_NEWLINE_LF and REGEX_NEWLINE_CRLF compile options, and with REGEX_MATCH_NEWLINE_ANY, REGEX_MATCH_NEWLINE_CR, REGEX_MATCH_NEWLINE_LF and REGEX_MATCH_NEWLINE_CRLF match options. These settings are also relevant when compiling a pattern if REGEX_EXTENDED is set, and an unescaped "#" outside a character class is encountered. This indicates a comment that lasts until after the next newline.

Creating and manipulating the same Glib::Regex class from different threads is not a problem as Glib::Regex does not modify its internal state between creation and destruction, on the other hand Glib::MatchInfo is not threadsafe.

The regular expressions low level functionalities are obtained through the excellent PCRE library written by Philip Hazel.

Since glibmm 2.14:

## Constructor & Destructor Documentation

Glib::Regex::Regex | ( |  | ) | `[protected]`

## Member Function Documentation

static bool Glib::Regex::check_replacement | ( | const Glib::ustring& | replacement,
|  | gboolean * | has_references |
| ) |  |  | `[static]`

Checks whether replacement is a valid replacement string (see g_regex_replace()), i.e. that all escape sequences in it are valid.

If has_references is not `0` then replacement is checked for pattern references. For instance, replacement text 'foo`\n`' does not contain references and may be evaluated without information about actual match, but '' (whole match followed by first subpattern) requires valid MatchInfo object.

Since glibmm 2.14:

Parameters:

  | replacement | The replacement string.
  | has_references | Location to store information about references in replacement or `0`.

Returns:
  Whether replacement is a valid replacement string.

static Glib::RefPtr<Glib::Regex> Glib::Regex::create | ( | const Glib::ustring& | pattern,
|  | RegexCompileFlags | compile_options = `static_cast< RegexCompileFlags >(0)`,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)` |
| ) |  |  | `[static]`

static Glib::ustring Glib::Regex::escape_string | ( | const Glib::ustring& | string | ) | `[static]`

int Glib::Regex::get_capture_count | ( |  | ) | const

Returns the number of capturing subpatterns in the pattern.

Since glibmm 2.14:

Returns:
  The number of capturing subpatterns.

RegexCompileFlags Glib::Regex::get_compile_flags | ( |  | ) | const

Returns the compile options that regex was created with.

Since glibmm 2.26:

Returns:
  Flags from RegexCompileFlags.

RegexMatchFlags Glib::Regex::get_match_flags | ( |  | ) | const

Returns the match options that regex was created with.

Since glibmm 2.26:

Returns:
  Flags from RegexMatchFlags.

int Glib::Regex::get_max_backref | ( |  | ) | const

Returns the number of the highest back reference in the pattern, or 0 if the pattern does not contain back references.

Since glibmm 2.14:

Returns:
  The number of the highest back reference.

Glib::ustring Glib::Regex::get_pattern | ( |  | ) | const

Gets the pattern string associated with regex, i.e. a copy of the string passed to g_regex_new().

Since glibmm 2.14:

Returns:
  The pattern of regex.

int Glib::Regex::get_string_number | ( | const Glib::ustring& | name | ) | const

Retrieves the number of the subexpression named name.

Since glibmm 2.14:

Parameters:

  | name | Name of the subexpression.

Returns:
  The number of the subexpression or -1 if name does not exists.

const GRegex* Glib::Regex::gobj | ( |  | ) | const

Provides access to the underlying C instance.

GRegex* Glib::Regex::gobj | ( |  | ) |

Provides access to the underlying C instance.

GRegex* Glib::Regex::gobj_copy | ( |  | ) | const

Provides access to the underlying C instance. The caller is responsible for unrefing it. Use when directly setting fields in structs.

bool Glib::Regex::match | ( | const Glib::ustring& | string,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)` |
| ) |  |  |

bool Glib::Regex::match | ( | const Glib::ustring& | string,
|  | int | start_position,
|  | RegexMatchFlags | match_options |
| ) |  |  |

bool Glib::Regex::match | ( | const Glib::ustring& | string,
|  | gssize | string_len,
|  | int | start_position,
|  | RegexMatchFlags | match_options |
| ) |  |  |

bool Glib::Regex::match_all | ( | const Glib::ustring& | string,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)` |
| ) |  |  |

bool Glib::Regex::match_all | ( | const Glib::ustring& | string,
|  | int | start_position,
|  | RegexMatchFlags | match_options |
| ) |  |  |

bool Glib::Regex::match_all | ( | const Glib::ustring& | string,
|  | gssize | string_len,
|  | int | start_position,
|  | RegexMatchFlags | match_options |
| ) |  |  |

static bool Glib::Regex::match_simple | ( | const Glib::ustring& | pattern,
|  | const Glib::ustring& | string,
|  | RegexCompileFlags | compile_options = `static_cast< RegexCompileFlags >(0)`,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)` |
| ) |  |  | `[static]`

Scans for a match in string for pattern.

This function is equivalent to g_regex_match() but it does not require to compile the pattern with g_regex_new(), avoiding some lines of code when you need just to do a match without extracting substrings, capture counts, and so on.

If this function is to be called on the same pattern more than once, it's more efficient to compile the pattern once with g_regex_new() and then use g_regex_match().

Since glibmm 2.14:

Parameters:

  | pattern | The regular expression.
  | string | The string to scan for matches.
  | compile_options | Compile options for the regular expression, or 0.
  | match_options | Match options, or 0.

Returns:
  `true` if the string matched, `false` otherwise.

void Glib::Regex::operator delete | ( | void * | ,
|  | size_t |  |
| ) |  |  | `[protected]`

void Glib::Regex::reference | ( |  | ) | const

Increment the reference count for this object.

You should never need to do this manually - use the object via a RefPtr instead.

Glib::ustring Glib::Regex::replace | ( | const Glib::ustring& | string,
|  | int | start_position,
|  | const Glib::ustring& | replacement,
|  | RegexMatchFlags | match_options |
| ) |  |  |

Glib::ustring Glib::Regex::replace | ( | const gchar * | string,
|  | gssize | string_len,
|  | int | start_position,
|  | const Glib::ustring& | replacement,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)` |
| ) |  |  |

Replaces all occurrences of the pattern in regex with the replacement text.

Backreferences of the form '' or '<number>' in the replacement text are interpolated by the number-th captured subexpression of the match, '<name>' refers to the captured subexpression with the given name. '' refers to the complete match, but '' followed by a number is the octal representation of a character. To include a literal '\' in the replacement, write '\'. There are also escapes that changes the case of the following text:

<variablelist> <varlistentry> <listitem>

Convert to lower case the next character

</listitem> </varlistentry> <varlistentry> <listitem>

Convert to upper case the next character

</listitem> </varlistentry> <varlistentry> <listitem>

Convert to lower case till

</listitem> </varlistentry> <varlistentry> <listitem>

Convert to upper case till

</listitem> </varlistentry> <varlistentry> <listitem>

End case modification

</listitem> </varlistentry> </variablelist>

If you do not need to use backreferences use g_regex_replace_literal().

The replacement string must be UTF-8 encoded even if REGEX_RAW was passed to g_regex_new(). If you want to use not UTF-8 encoded stings you can use g_regex_replace_literal().

Setting start_position differs from just passing over a shortened string and setting REGEX_MATCH_NOTBOL in the case of a pattern that begins with any kind of lookbehind assertion, such as "\b".

Since glibmm 2.14:

Parameters:

  | string | The string to perform matches against.
  | string_len | The length of string, or -1 if string is nul-terminated.
  | start_position | Starting index of the string to match.
  | replacement | Text to replace each match with.
  | match_options | Options for the match.

Returns:
  A newly allocated string containing the replacements.

Glib::ustring Glib::Regex::replace_eval | ( | const Glib::ustring& | string,
|  | gssize | string_len,
|  | int | start_position,
|  | RegexMatchFlags | match_options,
|  | GRegexEvalCallback | eval,
|  | gpointer | user_data |
| ) |  |  |

Replaces occurrences of the pattern in regex with the output of eval for that occurrence.

Setting start_position differs from just passing over a shortened string and setting REGEX_MATCH_NOTBOL in the case of a pattern that begins with any kind of lookbehind assertion, such as "\b".

The following example uses g_regex_replace_eval() to replace multiple strings at once: |[ static `bool` eval_cb (const GMatchInfo *info, GString *res, gpointer data) { gchar *match; gchar *r;

match = g_match_info_fetch (info, 0); r = g_hash_table_lookup ((GHashTable *)data, match); g_string_append (res, r); g_free (match);

return `false`; }

/ * ... * /

GRegex *reg; GHashTable *h; gchar *res;

h = g_hash_table_new (g_str_hash, g_str_equal);

g_hash_table_insert (h, "1", "ONE"); g_hash_table_insert (h, "2", "TWO"); g_hash_table_insert (h, "3", "THREE"); g_hash_table_insert (h, "4", "FOUR");

reg = g_regex_new ("1|2|3|4", 0, 0, `0`); res = g_regex_replace_eval (reg, text, -1, 0, 0, eval_cb, h, `0`); g_hash_table_destroy (h);

/ * ... * / ]|

Since glibmm 2.14:

Parameters:

  | string_len | The length of string, or -1 if string is nul-terminated.
  | start_position | Starting index of the string to match.
  | match_options | Options for the match.
  | eval | A function to call for each match.
  | user_data | User data to pass to the function.

Returns:
  A newly allocated string containing the replacements.

Glib::ustring Glib::Regex::replace_literal | ( | const gchar * | string,
|  | gssize | string_len,
|  | int | start_position,
|  | const Glib::ustring& | replacement,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)` |
| ) |  |  |

Replaces all occurrences of the pattern in regex with the replacement text.

replacement is replaced literally, to include backreferences use g_regex_replace().

Setting start_position differs from just passing over a shortened string and setting REGEX_MATCH_NOTBOL in the case of a pattern that begins with any kind of lookbehind assertion, such as "\b".

Since glibmm 2.14:

Parameters:

  | string | The string to perform matches against.
  | string_len | The length of string, or -1 if string is nul-terminated.
  | start_position | Starting index of the string to match.
  | replacement | Text to replace each match with.
  | match_options | Options for the match.

Returns:
  A newly allocated string containing the replacements.

Glib::ustring Glib::Regex::replace_literal | ( | const Glib::ustring& | string,
|  | int | start_position,
|  | const Glib::ustring& | replacement,
|  | RegexMatchFlags | match_options |
| ) |  |  |

Glib::StringArrayHandle Glib::Regex::split | ( | const Glib::ustring& | string,
|  | int | start_position,
|  | RegexMatchFlags | match_options,
|  | int | max_tokens |
| ) |  |  | const

Glib::StringArrayHandle Glib::Regex::split | ( | const Glib::ustring& | string,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)` |
| ) |  |  |

Breaks the string on the pattern, and returns an array of the tokens.

If the pattern contains capturing parentheses, then the text for each of the substrings will also be returned. If the pattern does not match anywhere in the string, then the whole string is returned as the first token.

As a special case, the result of splitting the empty string "" is an empty vector, not a vector containing a single string. The reason for this special case is that being able to represent a empty vector is typically more useful than consistent handling of empty elements. If you do need to represent empty elements, you'll need to check for the empty string before calling this function.

A pattern that can match empty strings splits string into separate characters wherever it matches the empty string between characters. For example splitting "ab c" using as a separator "\s*", you will get "a", "b" and "c".

Since glibmm 2.14:

Parameters:

  | string | The string to split with the pattern.
  | match_options | Match time option flags.

Returns:
  A `0`-terminated gchar ** array. Free it using g_strfreev().

Glib::StringArrayHandle Glib::Regex::split | ( | const gchar * | string,
|  | gssize | string_len,
|  | int | start_position,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)`,
|  | int | max_tokens = `0` |
| ) |  |  | const

Breaks the string on the pattern, and returns an array of the tokens.

If the pattern contains capturing parentheses, then the text for each of the substrings will also be returned. If the pattern does not match anywhere in the string, then the whole string is returned as the first token.

As a special case, the result of splitting the empty string "" is an empty vector, not a vector containing a single string. The reason for this special case is that being able to represent a empty vector is typically more useful than consistent handling of empty elements. If you do need to represent empty elements, you'll need to check for the empty string before calling this function.

A pattern that can match empty strings splits string into separate characters wherever it matches the empty string between characters. For example splitting "ab c" using as a separator "\s*", you will get "a", "b" and "c".

Setting start_position differs from just passing over a shortened string and setting REGEX_MATCH_NOTBOL in the case of a pattern that begins with any kind of lookbehind assertion, such as "\b".

Since glibmm 2.14:

Parameters:

  | string | The string to split with the pattern.
  | string_len | The length of string, or -1 if string is nul-terminated.
  | start_position | Starting index of the string to match.
  | match_options | Match time option flags.
  | max_tokens | The maximum number of tokens to split string into. If this is less than 1, the string is split completely.

Returns:
  A `0`-terminated gchar ** array. Free it using g_strfreev().

static Glib::StringArrayHandle Glib::Regex::split_simple | ( | const Glib::ustring& | pattern,
|  | const Glib::ustring& | string,
|  | RegexCompileFlags | compile_options = `static_cast< RegexCompileFlags >(0)`,
|  | RegexMatchFlags | match_options = `static_cast< RegexMatchFlags >(0)` |
| ) |  |  | `[static]`

Breaks the string on the pattern, and returns an array of the tokens.

If the pattern contains capturing parentheses, then the text for each of the substrings will also be returned. If the pattern does not match anywhere in the string, then the whole string is returned as the first token.

This function is equivalent to g_regex_split() but it does not require to compile the pattern with g_regex_new(), avoiding some lines of code when you need just to do a split without extracting substrings, capture counts, and so on.

If this function is to be called on the same pattern more than once, it's more efficient to compile the pattern once with g_regex_new() and then use g_regex_split().

As a special case, the result of splitting the empty string "" is an empty vector, not a vector containing a single string. The reason for this special case is that being able to represent a empty vector is typically more useful than consistent handling of empty elements. If you do need to represent empty elements, you'll need to check for the empty string before calling this function.

A pattern that can match empty strings splits string into separate characters wherever it matches the empty string between characters. For example splitting "ab c" using as a separator "\s*", you will get "a", "b" and "c".

Since glibmm 2.14:

Parameters:

  | pattern | The regular expression.
  | string | The string to scan for matches.
  | compile_options | Compile options for the regular expression, or 0.
  | match_options | Match options, or 0.

Returns:
  A `0`-terminated array of strings. Free it using g_strfreev().

void Glib::Regex::unreference | ( |  | ) | const

Decrement the reference count for this object.

You should never need to do this manually - use the object via a RefPtr instead.

## Friends And Related Function Documentation

Glib::RefPtr< Glib::Regex > wrap | ( | GRegex * | object,
|  | bool | take_copy = `false` |
| ) |  |  | `[related]`

A Glib::wrap() method for this object.

Parameters:

  | object | The C instance.
  | take_copy | False if the result should take ownership of the C instance. True if it should take a new copy or ref.

Returns:
  A C++ instance that wraps this C instance.