Tcl_RegExpMatch(3) Tcl Library Procedures Tcl_RegExpMatch(3)
____________________________________________________________________________
NAME
Tcl_RegExpMatch, Tcl_RegExpCompile, Tcl_RegExpExec, Tcl_RegExpRange,
Tcl_GetRegExpFromObj, Tcl_RegExpMatchObj, Tcl_RegExpExecObj,
Tcl_RegExpGetInfo - Pattern matching with regular expressions
SYNOPSIS
#include <tcl.h> int
Tcl_RegExpMatchObj(
interp,
textObj,
patObj)
int
Tcl_RegExpMatch(
interp,
text,
pattern)
Tcl_RegExp
Tcl_RegExpCompile(
interp,
pattern)
int
Tcl_RegExpExec(
interp,
regexp,
text,
start)
void
Tcl_RegExpRange(
regexp,
index,
startPtr,
endPtr)
Tcl_RegExp
Tcl_GetRegExpFromObj(
interp,
patObj,
cflags)
int
Tcl_RegExpExecObj(
interp,
regexp,
textObj,
offset,
nmatches,
eflags)
void
Tcl_RegExpGetInfo(
regexp,
infoPtr)
ARGUMENTS
Tcl_Interp
*interp (in) Tcl interpreter to use for error
reporting. The interpreter may
be NULL if no error reporting is
desired.
Tcl_Obj
*textObj (in/out) Refers to the value from which
to get the text to search. The
internal representation of the
value may be converted to a form
that can be efficiently
searched.
Tcl_Obj
*patObj (in/out) Refers to the value from which
to get a regular expression. The
compiled regular expression is
cached in the value.
const char
*text (in) Text to search for a match with
a regular expression.
const char
*pattern (in) String in the form of a regular
expression pattern.
Tcl_RegExp
regexp (in) Compiled regular expression.
Must have been returned
previously by
Tcl_GetRegExpFromObj or
Tcl_RegExpCompile.
const char
*start (in) If
text is just a portion of
some other string, this argument
identifies the beginning of the
larger string. If it is not the
same as
text, then no "
^"
matches will be allowed.
int
index (in) Specifies which range is
desired: 0 means the range of
the entire match, 1 or greater
means the range that matched a
parenthesized sub-expression.
const char
**startPtr (out) The address of the first
character in the range is stored
here, or NULL if there is no
such range.
const char
**endPtr (out) The address of the character
just after the last one in the
range is stored here, or NULL if
there is no such range.
int
cflags (in) OR-ed combination of the
compilation flags
TCL_REG_ADVANCED,
TCL_REG_EXTENDED,
TCL_REG_BASIC,
TCL_REG_EXPANDED,
TCL_REG_QUOTE,
TCL_REG_NOCASE,
TCL_REG_NEWLINE,
TCL_REG_NLSTOP,
TCL_REG_NLANCH,
TCL_REG_NOSUB, and
TCL_REG_CANMATCH. See below for
more information.
int
offset (in) The character offset into the
text where matching should
begin. The value of the offset
has no impact on
^ matches.
This behavior is controlled by
eflags.
int
nmatches (in) The number of matching
subexpressions that should be
remembered for later use. If
this value is 0, then no
subexpression match information
will be computed. If the value
is -1, then all of the matching
subexpressions will be
remembered. Any other value
will be taken as the maximum
number of subexpressions to
remember.
int
eflags (in) OR-ed combination of the
execution flags
TCL_REG_NOTBOL and
TCL_REG_NOTEOL. See below
for more information.
Tcl_RegExpInfo
*infoPtr (out) The address of the location
where information about a
previous match should be stored
by
Tcl_RegExpGetInfo.
____________________________________________________________________________
DESCRIPTION
Tcl_RegExpMatch determines whether its
pattern argument matches
regexp, where
regexp is interpreted as a regular expression using the
rules in the
re_syntax reference page. If there is a match then
Tcl_RegExpMatch returns 1. If there is no match then
Tcl_RegExpMatch returns 0. If an error occurs in the matching process (e.g.
pattern is not a valid regular expression) then
Tcl_RegExpMatch returns -1
and leaves an error message in the interpreter result.
Tcl_RegExpMatchObj is similar to
Tcl_RegExpMatch except it operates
on the Tcl values
textObj and
patObj instead of UTF strings.
Tcl_RegExpMatchObj is generally more efficient than
Tcl_RegExpMatch,
so it is the preferred interface.
Tcl_RegExpCompile,
Tcl_RegExpExec, and
Tcl_RegExpRange provide lower-
level access to the regular expression pattern matcher.
Tcl_RegExpCompile compiles a regular expression string into the
internal form used for efficient pattern matching. The return value
is a token for this compiled form, which can be used in subsequent
calls to
Tcl_RegExpExec or
Tcl_RegExpRange. If an error occurs while
compiling the regular expression then
Tcl_RegExpCompile returns NULL
and leaves an error message in the interpreter result. Note: the
return value from
Tcl_RegExpCompile is only valid up to the next call
to
Tcl_RegExpCompile; it is not safe to retain these values for long
periods of time.
Tcl_RegExpExec executes the regular expression pattern matcher. It
returns 1 if
text contains a range of characters that match
regexp, 0
if no match is found, and -1 if an error occurs. In the case of an
error,
Tcl_RegExpExec leaves an error message in the interpreter
result. When searching a string for multiple matches of a pattern,
it is important to distinguish between the start of the original
string and the start of the current search. For example, when
searching for the second occurrence of a match, the
text argument
might point to the character just after the first match; however, it
is important for the pattern matcher to know that this is not the
start of the entire string, so that it does not allow "
^" atoms in
the pattern to match. The
start argument provides this information
by pointing to the start of the overall string containing
text.
Start will be less than or equal to
text; if it is less than
text then no
^ matches will be allowed.
Tcl_RegExpRange may be invoked after
Tcl_RegExpExec returns; it
provides detailed information about what ranges of the string matched
what parts of the pattern.
Tcl_RegExpRange returns a pair of
pointers in
*startPtr and
*endPtr that identify a range of characters
in the source string for the most recent call to
Tcl_RegExpExec.
Index indicates which of several ranges is desired: if
index is 0,
information is returned about the overall range of characters that
matched the entire pattern; otherwise, information is returned about
the range of characters that matched the
index'th parenthesized
subexpression within the pattern. If there is no range corresponding
to
index then NULL is stored in
*startPtr and
*endPtr.
Tcl_GetRegExpFromObj,
Tcl_RegExpExecObj, and
Tcl_RegExpGetInfo are
value interfaces that provide the most direct control of Henry
Spencer's regular expression library. For users that need to modify
compilation and execution options directly, it is recommended that
you use these interfaces instead of calling the internal regexp
functions. These interfaces handle the details of UTF to Unicode
translations as well as providing improved performance through
caching in the pattern and string values.
Tcl_GetRegExpFromObj attempts to return a compiled regular expression
from the
patObj. If the value does not already contain a compiled
regular expression it will attempt to create one from the string in
the value and assign it to the internal representation of the
patObj.
The return value of this function is of type
Tcl_RegExp. The return
value is a token for this compiled form, which can be used in
subsequent calls to
Tcl_RegExpExecObj or
Tcl_RegExpGetInfo. If an
error occurs while compiling the regular expression then
Tcl_GetRegExpFromObj returns NULL and leaves an error message in the
interpreter result. The regular expression token can be used as long
as the internal representation of
patObj refers to the compiled form.
The
cflags argument is a bit-wise OR of zero or more of the following
flags that control the compilation of
patObj:
TCL_REG_ADVANCED Compile advanced regular expressions ("ARE"s). This mode
corresponds to the normal regular expression syntax accepted
by the Tcl
regexp and
regsub commands.
TCL_REG_EXTENDED Compile extended regular expressions ("ERE"s). This mode
corresponds to the regular expression syntax recognized by
Tcl 8.0 and earlier versions.
TCL_REG_BASIC Compile basic regular expressions ("BRE"s). This mode
corresponds to the regular expression syntax recognized by
common Unix utilities like
sed and
grep. This is the
default if no flags are specified.
TCL_REG_EXPANDED Compile the regular expression (basic, extended, or
advanced) using an expanded syntax that allows comments and
whitespace. This mode causes non-backslashed non-bracket-
expression white space and #-to-end-of-line comments to be
ignored.
TCL_REG_QUOTE Compile a literal string, with all characters treated as
ordinary characters.
TCL_REG_NOCASE Compile for matching that ignores upper/lower case
distinctions.
TCL_REG_NEWLINE Compile for newline-sensitive matching. By default, newline
is a completely ordinary character with no special meaning
in either regular expressions or strings. With this flag,
"[^" bracket expressions and "." never match newline, "^"
matches an empty string after any newline in addition to its
normal function, and "$" matches an empty string before any
newline in addition to its normal function.
REG_NEWLINE is
the bit-wise OR of
REG_NLSTOP and
REG_NLANCH.
TCL_REG_NLSTOP Compile for partial newline-sensitive matching, with the
behavior of "[^" bracket expressions and "." affected, but
not the behavior of "^" and "$". In this mode, "[^" bracket
expressions and "." never match newline.
TCL_REG_NLANCH Compile for inverse partial newline-sensitive matching, with
the behavior of "^" and "$" (the "anchors") affected, but
not the behavior of "[^" bracket expressions and ".". In
this mode "^" matches an empty string after any newline in
addition to its normal function, and "$" matches an empty
string before any newline in addition to its normal
function.
TCL_REG_NOSUB Compile for matching that reports only success or failure,
not what was matched. This reduces compile overhead and may
improve performance. Subsequent calls to
Tcl_RegExpGetInfo or
Tcl_RegExpRange will not report any match information.
TCL_REG_CANMATCH Compile for matching that reports the potential to complete
a partial match given more text (see below).
Only one of
TCL_REG_EXTENDED,
TCL_REG_ADVANCED,
TCL_REG_BASIC, and
TCL_REG_QUOTE may be specified.
Tcl_RegExpExecObj executes the regular expression pattern matcher.
It returns 1 if
objPtr contains a range of characters that match
regexp, 0 if no match is found, and -1 if an error occurs. In the
case of an error,
Tcl_RegExpExecObj leaves an error message in the
interpreter result. The
nmatches value indicates to the matcher how
many subexpressions are of interest. If
nmatches is 0, then no
subexpression match information is recorded, which may allow the
matcher to make various optimizations. If the value is -1, then all
of the subexpressions in the pattern are remembered. If the value is
a positive integer, then only that number of subexpressions will be
remembered. Matching begins at the specified Unicode character index
given by
offset. Unlike
Tcl_RegExpExec, the behavior of anchors is
not affected by the offset value. Instead the behavior of the
anchors is explicitly controlled by the
eflags argument, which is a
bit-wise OR of zero or more of the following flags:
TCL_REG_NOTBOL The starting character will not be treated as the beginning
of a line or the beginning of the string, so "^" will not
match there. Note that this flag has no effect on how "
\A"
matches.
TCL_REG_NOTEOL The last character in the string will not be treated as the
end of a line or the end of the string, so "$" will not
match there. Note that this flag has no effect on how "
\Z"
matches.
Tcl_RegExpGetInfo retrieves information about the last match
performed with a given regular expression
regexp. The
infoPtr argument contains a pointer to a structure that is defined as
follows:
typedef struct Tcl_RegExpInfo {
int
nsubs;
Tcl_RegExpIndices *
matches;
long
extendStart;
}
Tcl_RegExpInfo;
The
nsubs field contains a count of the number of parenthesized
subexpressions within the regular expression. If the
TCL_REG_NOSUB was used, then this value will be zero. The
matches field points to
an array of
nsubs+1 values that indicate the bounds of each
subexpression matched. The first element in the array refers to the
range matched by the entire regular expression, and subsequent
elements refer to the parenthesized subexpressions in the order that
they appear in the pattern. Each element is a structure that is
defined as follows:
typedef struct Tcl_RegExpIndices {
long
start;
long
end;
}
Tcl_RegExpIndices;
The
start and
end values are Unicode character indices relative to
the offset location within
objPtr where matching began. The
start index identifies the first character of the matched subexpression.
The
end index identifies the first character after the matched
subexpression. If the subexpression matched the empty string, then
start and
end will be equal. If the subexpression did not
participate in the match, then
start and
end will be set to -1.
The
extendStart field in
Tcl_RegExpInfo is only set if the
TCL_REG_CANMATCH flag was used. It indicates the first character in
the string where a match could occur. If a match was found, this
will be the same as the beginning of the current match. If no match
was found, then it indicates the earliest point at which a match
might occur if additional text is appended to the string. If it is
no match is possible even with further text, this field will be set
to -1.
SEE ALSO
re_syntax(n)
KEYWORDS
match, pattern, regular expression, string, subexpression,
Tcl_RegExpIndices, Tcl_RegExpInfo
Tcl 8.1 Tcl_RegExpMatch(3)