|
| PerlRegEx () |
|
| PerlRegEx (const std::string ®ex, int cflags=0) |
|
| PerlRegEx (const PerlRegEx &ref) |
|
| ~PerlRegEx () |
|
PerlRegEx & | operator= (const PerlRegEx &ref) |
|
bool | compile (const std::string ®ex, int cflags=0) |
|
int | errorCode () |
|
std::string | errorString () const |
|
std::string | patternString () const |
|
int | compileFlags () const |
|
bool | isCompiled () const |
|
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 |
|
|
bool | execute (MatchVector &sub, const std::string &str, size_t index=0, size_t count=0, int eflags=0) |
|
bool | execute (MatchArray &sub, const std::string &str, size_t index=0, size_t count=0, int eflags=0) |
|
Perl compatible Regular Expression wrapper class and utility functions.
The PerlRegEx implementation depends on avaliability of the pcre library.
Consult the pcre_compile(3), pcre_exec(3) and pcreapi(3) manual pages for informations about details of the pcre implementation.
- Note
- This class does NOT wrap all features provided by the pcre library!
int ca_mgm::PerlRegEx::errorCode |
( |
| ) |
|
Return the last error code generated by compile or one of the executing methods.
In case of a compile error, the returned value points to the position (character offset) in the regex pattern string, where where the error was discovered.
In all other cases, the result of the pcre_exec function call is returned.
- Returns
- pcre_exec result or compile error position.
bool ca_mgm::PerlRegEx::execute |
( |
MatchVector & |
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 PosixRegEx class, the PCRE library supports a string index (startoffset) and is able to look behind the starting point. If the regex makes use of the "start of string/line" metacharacter (^), the regex may not match if index is greater than 0.
The expected maximal number of matching substrings can be specified in count
. If the default value of 0 is used, the detected count by pcre_fullinfo will be used.
- Note
- If the specified count is greater 0 but smaller than the effectively number of found matches, false is returned (failure, error code 0). 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 offsets. 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.
The resulting MatchVector is twice as large as the number of captured substrings, the resulting MatchArray equal.
Consult the pcre_exec(3) and pcreapi(3) manual pages for the complete and detailed description.
- 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. |
AssertionException | if the count value is too big (would cause integer overflow). |
OutOfBoundsException | if the index is greater than the string length. |
The eflags
parameter can be set to 0 or one or a bitwise-or of the following options:
PCRE_NOTBOL
The circumflex character (^) will not match the beginning of string.
PCRE_NOTEOL
The dollar sign ($) will not match the end of string.
PCRE_ANCHORED
Match only at the first position
PCRE_NOTEMPTY
An empty string is not a valid match
PCRE_NO_UTF8_CHECK
Do the string for UTF-8 validity (only relevant if PCRE_UTF8 was set at compile time)
- Example:
* std::string str("foo = bar trala hoho");
*
* {
*
*
*
*
* }
*
*
if(
PerlRegEx(
"=").execute(rsub, str) && !rsub.empty())
* {
*
*
*
*
* }
*
*
bool ca_mgm::PerlRegEx::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 PosixRegEx class, the PCRE library supports a string index (startoffset) and is able to look behind the starting point. If the regex makes use of the "start of string/line" metacharacter (^), the regex may not match if index is greater than 0.
The expected maximal number of matching substrings can be specified in count
. If the default value of 0 is used, the detected count by pcre_fullinfo will be used.
- Note
- If the specified count is greater 0 but smaller than the effectively number of found matches, false is returned (failure, error code 0). 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 offsets. 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.
The resulting MatchVector is twice as large as the number of captured substrings, the resulting MatchArray equal.
Consult the pcre_exec(3) and pcreapi(3) manual pages for the complete and detailed description.
- 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. |
AssertionException | if the count value is too big (would cause integer overflow). |
OutOfBoundsException | if the index is greater than the string length. |
The eflags
parameter can be set to 0 or one or a bitwise-or of the following options:
PCRE_NOTBOL
The circumflex character (^) will not match the beginning of string.
PCRE_NOTEOL
The dollar sign ($) will not match the end of string.
PCRE_ANCHORED
Match only at the first position
PCRE_NOTEMPTY
An empty string is not a valid match
PCRE_NO_UTF8_CHECK
Do the string for UTF-8 validity (only relevant if PCRE_UTF8 was set at compile time)
- Example:
* std::string str("foo = bar trala hoho");
*
* {
*
*
*
*
* }
*
*
if(
PerlRegEx(
"=").execute(rsub, str) && !rsub.empty())
* {
*
*
*
*
* }
*
*
std::string ca_mgm::PerlRegEx::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. |
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, "/");
*
*
*
*
std::vector<std::string> ca_mgm::PerlRegEx::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. |
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 =
PerlRegEx(
"([ \t]*,[ \t]*)").split(str);
*
*
*
*