Using the standard algorithm for regular expression matching only the
longest match in the
string is retrieved, it is not
possible to obtain all the available matches. For instance matching
"<a> <b> <c>" against the pattern "<.*>" you
get "<a> <b> <c>".
This function uses a different algorithm (called DFA, i.e.
deterministic finite automaton), so it can retrieve all the possible
matches, all starting at the same point in the string. For instance
matching "<a> <b> <c>" against the pattern
"<.*>;" you would obtain three matches: "<a> <b>
<c>", "<a> <b>" and "<a>".
The number of matched strings is retrieved using
matchInfoGetMatchCount. To obtain the matched strings and their
position you can use, respectively,
matchInfoFetch and
matchInfoFetchPos. Note that the strings are returned in
reverse order of length; that is, the longest matching string is given
first.
Note that the DFA algorithm is slower than the standard one and it is
not able to capture substrings, so backreferences do not work.
Setting
startPosition differs from just passing over a
shortened string and setting
RegexMatchFlagsNotbol in the case
of a pattern that begins with any kind of lookbehind assertion, such
as "\b".
Unless
RegexCompileFlagsRaw is specified in the options,
string must be valid UTF-8.
A
MatchInfo structure, used to get information on the match, is
stored in
matchInfo if not
Nothing. Note that
if
matchInfo is not
Nothing then it is created
even if the function returns
False, i.e. you must free it
regardless if regular expression actually matched.
string is not copied and is used in
MatchInfo
internally. If you use any
MatchInfo method (except
matchInfoFree) after freeing or modifying
string then the behaviour is undefined.
Since: 2.14