|
| PosixRegEx () |
|
| PosixRegEx (const std::string ®ex, int cflags=1) |
|
| PosixRegEx (const PosixRegEx &ref) |
|
| ~PosixRegEx () |
|
PosixRegEx & | operator= (const PosixRegEx &ref) |
|
bool | compile (const std::string ®ex, int cflags=1) |
|
int | errorCode () |
|
std::string | errorString () const |
|
std::string | patternString () const |
|
int | compileFlags () const |
|
bool | isCompiled () const |
|
bool | execute (MatchArray &sub, const std::string &str, size_t index=0, size_t count=0, int eflags=0) |
|
std::vector< std::string > | capture (const std::string &str, size_t index=0, size_t count=0, int eflags=0) |
|
std::string | replace (const std::string &str, const std::string &rep, bool global=false, int eflags=0) |
|
std::vector< std::string > | split (const std::string &str, bool empty=false, int eflags=0) |
|
std::vector< std::string > | grep (const std::vector< std::string > &src, int eflags=0) |
|
bool | match (const std::string &str, size_t index=0, int eflags=0) const |
|
POSIX Regular Expression wrapper class and utility functions.
Depends on avaliability of a POSIX.2 / SUSv2 conforming regcomp(3) and regexec(3) function implementation.
Consult the regcomp(3), regexec(3) and regex(7) manual pages for informations about details of the posix regex usage.
bool ca_mgm::PosixRegEx::execute |
( |
MatchArray & |
sub, |
|
|
const std::string & |
str, |
|
|
size_t |
index = 0 , |
|
|
size_t |
count = 0 , |
|
|
int |
eflags = 0 |
|
) |
| |
Execute regular expression matching against the string. The matching starts at the specified index and return true on match of false if no match found.
- Note
- In contrast to the (PCRE) PerlRegEx class, the index handling is not provided by posix regex. The PosixRegEx class is using simple str.c_str() + index construct and adjusts the resulting match offsets.
The expected number of substrings to match can be specified in count
. If the default value of 0 is used, the count as detected by compile is used instead.
- Note
- If the specified count is greater 0 but smaller than the effectively number of found matches, the match array will contain only offsets for captured substring. This is a different than in PerlRegEx that reports failure. If the specified count is greater 0 and greater than the the effectively number of found matches, unused offsets at the end are filled with to -1.
If no match was found, the sub
array will be empty and false is returned. If a match is found and the expression was compiled to capture substrings, the sub
array will be filled with the captured substring offset (match_t structures). The first (index 0) offset pair points to the start of the first match and the end of the last match. Unused / optional capturing subpattern offsets will be set to -1.
Consult the regexec(3) and regex(7) manual pages for complete and detailed descriptions.
- Parameters
-
sub | array for substring offsets |
str | string to match |
index | match string starting at index |
count | number of expected substring matches |
eflags | execution flags described bellow |
- Returns
- true on match or false
- Exceptions
-
RegExCompileException | if regex is not compiled. |
OutOfBoundsException | if the index is greater than the string length. |
The eflags
parameter can be set to 0, one or a bitwise-or of the following options:
REG_NOTBOL
The circumflex character (^) will not match the beginning of string.
REG_NOTEOL
The dollar sign ($) will not match the end of string.
- Example:
std::string str("foo = bar trala hoho");
{
}
std::string ca_mgm::PosixRegEx::replace |
( |
const std::string & |
str, |
|
|
const std::string & |
rep, |
|
|
bool |
global = false , |
|
|
int |
eflags = 0 |
|
) |
| |
Replace (substitute) the first or all matching substrings.
Substring(s) matching regular expression are replaced with the string provided in rep
and a new, modified string is returned. If no matches are found, a copy of 'str' string is returned.
The rep string can contain capturing references "\\1" to "\\9" that will be substituted with the corresponding captured string. Prepended "\\" before the reference disables (switches to skip) the substitution. Note, the notation using double-slash followed by a digit character, not just "\1" like the "\n" escape sequence.
- Parameters
-
str | string that should be matched |
rep | replacement substring with optional references |
global | if to replace the first or all matches |
eflags | execution flags, see execute() method |
- Returns
- new string with modification(s)
- Exceptions
-
RegExCompileException | if regex is not compiled or the REG_NOSUB compilation flag was used. |
RegExExecuteException | on execute failures. |
OutOfBoundsException | if the index is greater than the string length. |
- Example:
std::string str("//foo/.//bar/hoho");
std::string out = reg.replace(str, "/", true);
std::vector<std::string> ca_mgm::PosixRegEx::split |
( |
const std::string & |
str, |
|
|
bool |
empty = false , |
|
|
int |
eflags = 0 |
|
) |
| |
Split the specified string into an array of substrings. The regular expression is used to match the separators.
If the empty flag is true, empty substring are included in the resulting array.
If no separators were found, and the empty flag is true, the array will contain the input string as its only element. If the empty flag is false, a empty array is returned.
- Parameters
-
str | string that should be splitted |
empty | whether to capture empty substrings |
eflags | execution flags, see execute() method |
- Returns
- array of resulting substrings or empty array on failure
- Exceptions
-
RegExCompileException | if regex is not compiled or the REG_NOSUB compilation flag was used. |
RegExExecuteException | on execute failures. |
OutOfBoundsException | if the index is greater than the string length. |
- Example:
std::string str("1.23, .50 , , 71.00 , 6.00");
std::vector<std::string> out1 =
PosixRegEx(
"([ \t]*,[ \t]*)").split(str);