RegExp.3
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:15k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1994 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '" Copyright (c) 1998-1999 Scriptics Corporation
  5. '"
  6. '" See the file "license.terms" for information on usage and redistribution
  7. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  8. '" 
  9. '" RCS: @(#) $Id: RegExp.3,v 1.13 2002/11/13 22:11:40 vincentdarley Exp $
  10. '" 
  11. .so man.macros
  12. .TH Tcl_RegExpMatch 3 8.1 Tcl "Tcl Library Procedures"
  13. .BS
  14. .SH NAME
  15. Tcl_RegExpMatch, Tcl_RegExpCompile, Tcl_RegExpExec, Tcl_RegExpRange, Tcl_GetRegExpFromObj, Tcl_RegExpMatchObj, Tcl_RegExpExecObj, Tcl_RegExpGetInfo - Pattern matching with regular expressions
  16. .SH SYNOPSIS
  17. .nf
  18. fB#include <tcl.h>fR
  19. .sp
  20. int
  21. fBTcl_RegExpMatchObjfR(fIinterpfR, fIstrObjfR, fIpatObjfR)
  22. .sp
  23. int
  24. fBTcl_RegExpMatchfR(fIinterpfR, fIstringfR, fIpatternfR)
  25. .sp
  26. Tcl_RegExp
  27. fBTcl_RegExpCompilefR(fIinterpfR, fIpatternfR)
  28. .sp
  29. int
  30. fBTcl_RegExpExecfR(fIinterpfR, fIregexpfR, fIstringfR, fIstartfR)
  31. .sp
  32. fBTcl_RegExpRangefR(fIregexpfR, fIindexfR, fIstartPtrfR, fIendPtrfR)
  33. .VS 8.1
  34. .sp
  35. Tcl_RegExp
  36. fBTcl_GetRegExpFromObjfR(fIinterpfR, fIpatObjfR, fIcflagsfR)
  37. .sp
  38. int
  39. fBTcl_RegExpExecObjfR(fIinterpfR, fIregexpfR, fIobjPtrfR, fIoffsetfR, fInmatchesfR, fIeflagsfR)
  40. .sp
  41. fBTcl_RegExpGetInfofR(fIregexpfR, fIinfoPtrfR)
  42. .VE 8.1
  43. .SH ARGUMENTS
  44. .AS Tcl_Interp *interp
  45. .AP Tcl_Interp *interp in
  46. Tcl interpreter to use for error reporting.  The interpreter may be
  47. NULL if no error reporting is desired.
  48. .VS 8.1
  49. .AP Tcl_Obj *strObj in/out
  50. Refers to the object from which to get the string to search.  The
  51. internal representation of the object may be converted to a form that
  52. can be efficiently searched.
  53. .AP Tcl_Obj *patObj in/out
  54. Refers to the object from which to get a regular expression. The
  55. compiled regular expression is cached in the object.
  56. .VE 8.1
  57. .AP char *string in
  58. String to check for a match with a regular expression.
  59. .AP "CONST char" *pattern in
  60. String in the form of a regular expression pattern.
  61. .AP Tcl_RegExp regexp in
  62. Compiled regular expression.  Must have been returned previously
  63. by fBTcl_GetRegExpFromObjfR or fBTcl_RegExpCompilefR.
  64. .AP char *start in
  65. If fIstringfR is just a portion of some other string, this argument
  66. identifies the beginning of the larger string.
  67. If it isn't the same as fIstringfR, then no fB^fR matches
  68. will be allowed.
  69. .AP int index in
  70. Specifies which range is desired:  0 means the range of the entire
  71. match, 1 or greater means the range that matched a parenthesized
  72. sub-expression.
  73. .VS 8.4
  74. .AP "CONST char" **startPtr out
  75. The address of the first character in the range is stored here, or
  76. NULL if there is no such range.
  77. .AP "CONST char" **endPtr out
  78. The address of the character just after the last one in the range
  79. is stored here, or NULL if there is no such range.
  80. .VE 8.4
  81. .VS 8.1
  82. .AP int cflags in
  83. OR-ed combination of compilation flags. See below for more information.
  84. .AP Tcl_Obj *objPtr in/out
  85. An object which contains the string to check for a match with a
  86. regular expression.
  87. .AP int offset in
  88. The character offset into the string where matching should begin.
  89. The value of the offset has no impact on fB^fR matches.  This
  90. behavior is controlled by fIeflagsfR.
  91. .AP int nmatches in
  92. The number of matching subexpressions that should be remembered for
  93. later use.  If this value is 0, then no subexpression match
  94. information will be computed.  If the value is -1, then
  95. all of the matching subexpressions will be remembered.  Any other
  96. value will be taken as the maximum number of subexpressions to
  97. remember.
  98. .AP int eflags in
  99. OR-ed combination of the values TCL_REG_NOTBOL and TCL_REG_NOTEOL.
  100. See below for more information.
  101. .AP Tcl_RegExpInfo *infoPtr out
  102. The address of the location where information about a previous match
  103. should be stored by fBTcl_RegExpGetInfofR.
  104. .VE 8.1
  105. .BE
  106. .SH DESCRIPTION
  107. .PP
  108. fBTcl_RegExpMatchfR determines whether its fIpatternfR argument
  109. matches fIregexpfR, where fIregexpfR is interpreted
  110. as a regular expression using the rules in the fBre_syntaxfR
  111. reference page. 
  112. If there is a match then fBTcl_RegExpMatchfR returns 1.
  113. If there is no match then fBTcl_RegExpMatchfR returns 0.
  114. If an error occurs in the matching process (e.g. fIpatternfR
  115. is not a valid regular expression) then fBTcl_RegExpMatchfR
  116. returns -1 and leaves an error message in the interpreter result.
  117. .VS 8.1.2
  118. fBTcl_RegExpMatchObjfR is similar to fBTcl_RegExpMatchfR except it
  119. operates on the Tcl objects fIstrObjfR and fIpatObjfR instead of
  120. UTF strings. 
  121. fBTcl_RegExpMatchObjfR is generally more efficient than
  122. fBTcl_RegExpMatchfR, so it is the preferred interface.
  123. .VE 8.1.2
  124. .PP
  125. fBTcl_RegExpCompilefR, fBTcl_RegExpExecfR, and fBTcl_RegExpRangefR
  126. provide lower-level access to the regular expression pattern matcher.
  127. fBTcl_RegExpCompilefR compiles a regular expression string into
  128. the internal form used for efficient pattern matching.
  129. The return value is a token for this compiled form, which can be
  130. used in subsequent calls to fBTcl_RegExpExecfR or fBTcl_RegExpRangefR.
  131. If an error occurs while compiling the regular expression then
  132. fBTcl_RegExpCompilefR returns NULL and leaves an error message
  133. in the interpreter result.
  134. Note:  the return value from fBTcl_RegExpCompilefR is only valid
  135. up to the next call to fBTcl_RegExpCompilefR;  it is not safe to
  136. retain these values for long periods of time.
  137. .PP
  138. fBTcl_RegExpExecfR executes the regular expression pattern matcher.
  139. It returns 1 if fIstringfR contains a range of characters that
  140. match fIregexpfR, 0 if no match is found, and
  141. -1 if an error occurs.
  142. In the case of an error, fBTcl_RegExpExecfR leaves an error
  143. message in the interpreter result.
  144. When searching a string for multiple matches of a pattern,
  145. it is important to distinguish between the start of the original
  146. string and the start of the current search.
  147. For example, when searching for the second occurrence of a
  148. match, the fIstringfR argument might point to the character
  149. just after the first match;  however, it is important for the
  150. pattern matcher to know that this is not the start of the entire string,
  151. so that it doesn't allow fB^fR atoms in the pattern to match.
  152. The fIstartfR argument provides this information by pointing
  153. to the start of the overall string containing fIstringfR.
  154. fIStartfR will be less than or equal to fIstringfR;  if it
  155. is less than fIstringfR then no fB^fR matches will be allowed.
  156. .PP
  157. fBTcl_RegExpRangefR may be invoked after fBTcl_RegExpExecfR
  158. returns;  it provides detailed information about what ranges of
  159. the string matched what parts of the pattern.
  160. fBTcl_RegExpRangefR returns a pair of pointers in fI*startPtrfR
  161. and fI*endPtrfR that identify a range of characters in
  162. the source string for the most recent call to fBTcl_RegExpExecfR.
  163. fIIndexfR indicates which of several ranges is desired:
  164. if fIindexfR is 0, information is returned about the overall range
  165. of characters that matched the entire pattern;  otherwise,
  166. information is returned about the range of characters that matched the
  167. fIindexfR'th parenthesized subexpression within the pattern.
  168. If there is no range corresponding to fIindexfR then NULL
  169. is stored in fI*startPtrfR and fI*endPtrfR.
  170. .PP
  171. .VS 8.1
  172. fBTcl_GetRegExpFromObjfR, fBTcl_RegExpExecObjfR, and
  173. fBTcl_RegExpGetInfofR are object interfaces that provide the most
  174. direct control of Henry Spencer's regular expression library.  For
  175. users that need to modify compilation and execution options directly,
  176. it is recommended that you use these interfaces instead of calling the
  177. internal regexp functions.  These interfaces handle the details of UTF
  178. to Unicode translations as well as providing improved performance
  179. through caching in the pattern and string objects.
  180. .PP
  181. fBTcl_GetRegExpFromObjfR attempts to return a compiled regular
  182. expression from the fIpatObjfR.  If the object does not already
  183. contain a compiled regular expression it will attempt to create one
  184. from the string in the object and assign it to the internal
  185. representation of the fIpatObjfR.  The return value of this function
  186. is of type fBTcl_RegExpfR.  The return value is a token for this
  187. compiled form, which can be used in subsequent calls to
  188. fBTcl_RegExpExecObjfR or fBTcl_RegExpGetInfofR.  If an error
  189. occurs while compiling the regular expression then
  190. fBTcl_GetRegExpFromObjfR returns NULL and leaves an error message in
  191. the interpreter result.  The regular expression token can be used as
  192. long as the internal representation of fIpatObjfR refers to the
  193. compiled form.  The fIeflagsfR argument is a bitwise OR of
  194. zero or more of the following flags that control the compilation of
  195. fIpatObjfR:
  196. .RS 2
  197. .TP
  198. fBTCL_REG_ADVANCEDfR
  199. Compile advanced regular expressions (`AREs').  This mode corresponds to
  200. the normal regular expression syntax accepted by the Tcl regexp and
  201. regsub commands.
  202. .TP
  203. fBTCL_REG_EXTENDEDfR
  204. Compile extended regular expressions (`EREs').  This mode corresponds
  205. to the regular expression syntax recognized by Tcl 8.0 and earlier
  206. versions. 
  207. .TP
  208. fBTCL_REG_BASICfR
  209. Compile basic regular expressions (`BREs').  This mode corresponds
  210. to the regular expression syntax recognized by common Unix utilities
  211. like fBsedfR and fBgrepfR.  This is the default if no flags are
  212. specified.
  213. .TP
  214. fBTCL_REG_EXPANDEDfR
  215. Compile the regular expression (basic, extended, or advanced) using an
  216. expanded syntax that allows comments and whitespace.  This mode causes
  217. non-backslashed non-bracket-expression white
  218. space and #-to-end-of-line comments to be ignored.
  219. .TP
  220. fBTCL_REG_QUOTEfR
  221. Compile a literal string, with all characters treated as ordinary characters.
  222. .TP
  223. fBTCL_REG_NOCASEfR
  224. Compile for matching that ignores upper/lower case distinctions.
  225. .TP
  226. fBTCL_REG_NEWLINEfR
  227. Compile for newline-sensitive matching.  By default, newline is a
  228. completely ordinary character with no special meaning in either
  229. regular expressions or strings.  With this flag, `[^' bracket
  230. expressions and `.' never match newline, `^' matches an empty string
  231. after any newline in addition to its normal function, and `$' matches
  232. an empty string before any newline in addition to its normal function.
  233. fBREG_NEWLINEfR is the bitwise OR of fBREG_NLSTOPfR and
  234. fBREG_NLANCHfR.
  235. .TP
  236. fBTCL_REG_NLSTOPfR
  237. Compile for partial newline-sensitive matching,
  238. with the behavior of
  239. `[^' bracket expressions and `.' affected,
  240. but not the behavior of `^' and `$'.  In this mode, `[^' bracket
  241. expressions and `.' never match newline.
  242. .TP
  243. fBTCL_REG_NLANCHfR
  244. Compile for inverse partial newline-sensitive matching,
  245. with the behavior of
  246. of `^' and `$' (the ``anchors'') affected, but not the behavior of
  247. `[^' bracket expressions and `.'.  In this mode `^' matches an empty string
  248. after any newline in addition to its normal function, and `$' matches
  249. an empty string before any newline in addition to its normal function.
  250. .TP
  251. fBTCL_REG_NOSUBfR
  252. Compile for matching that reports only success or failure,
  253. not what was matched.  This reduces compile overhead and may improve
  254. performance.  Subsequent calls to fBTcl_RegExpGetInfofR or
  255. fBTcl_RegExpRangefR will not report any match information.
  256. .TP
  257. fBTCL_REG_CANMATCHfR
  258. Compile for matching that reports the potential to complete a partial
  259. match given more text (see below).
  260. .RE
  261. .PP
  262. Only one of
  263. fBTCL_REG_EXTENDEDfR,
  264. fBTCL_REG_ADVANCEDfR,
  265. fBTCL_REG_BASICfR, and
  266. fBTCL_REG_QUOTEfR may be specified.
  267. .PP
  268. fBTcl_RegExpExecObjfR executes the regular expression pattern
  269. matcher.  It returns 1 if fIobjPtrfR contains a range of characters
  270. that match fIregexpfR, 0 if no match is found, and -1 if an error
  271. occurs.  In the case of an error, fBTcl_RegExpExecObjfR leaves an
  272. error message in the interpreter result.  The fInmatchesfR value
  273. indicates to the matcher how many subexpressions are of interest.  If
  274. fInmatchesfR is 0, then no subexpression match information is
  275. recorded, which may allow the matcher to make various optimizations.
  276. If the value is -1, then all of the subexpressions in the pattern are
  277. remembered.  If the value is a positive integer, then only that number
  278. of subexpressions will be remembered.  Matching begins at the
  279. specified Unicode character index given by fIoffsetfR.  Unlike
  280. fBTcl_RegExpExecfR, the behavior of anchors is not affected by the
  281. offset value.  Instead the behavior of the anchors is explicitly
  282. controlled by the fIeflagsfR argument, which is a bitwise OR of
  283. zero or more of the following flags:
  284. .RS 2
  285. .TP
  286. fBTCL_REG_NOTBOLfR
  287. The starting character will not be treated as the beginning of a
  288. line or the beginning of the string, so `^' will not match there.
  289. Note that this flag has no effect on how `fBeAfR' matches.
  290. .TP
  291. fBTCL_REG_NOTEOLfR
  292. The last character in the string will not be treated as the end of a
  293. line or the end of the string, so '$' will not match there.
  294. Note that this flag has no effect on how `fBeZfR' matches.
  295. .RE
  296. .PP
  297. fBTcl_RegExpGetInfofR retrieves information about the last match
  298. performed with a given regular expression fIregexpfR.  The
  299. fIinfoPtrfR argument contains a pointer to a structure that is
  300. defined as follows:
  301. .PP
  302. .CS
  303. typedef struct Tcl_RegExpInfo {
  304. int fInsubsfR;
  305. Tcl_RegExpIndices *fImatchesfR;
  306. long fIextendStartfR;
  307. } Tcl_RegExpInfo;
  308. .CE
  309. .PP
  310. The fInsubsfR field contains a count of the number of parenthesized
  311. subexpressions within the regular expression.  If the fBTCL_REG_NOSUBfR
  312. was used, then this value will be zero.  The fImatchesfR field
  313. points to an array of fInsubsfR values that indicate the bounds of each
  314. subexpression matched.  The first element in the array refers to the
  315. range matched by the entire regular expression, and subsequent elements
  316. refer to the parenthesized subexpressions in the order that they
  317. appear in the pattern.  Each element is a structure that is defined as
  318. follows:
  319. .PP
  320. .CS
  321. typedef struct Tcl_RegExpIndices {
  322. long fIstartfR;
  323. long fIendfR;
  324. } Tcl_RegExpIndices;
  325. .CE
  326. .PP
  327. The fIstartfR and fIendfR values are Unicode character indices
  328. relative to the offset location within fIobjPtrfR where matching began.
  329. The fIstartfR index identifies the first character of the matched
  330. subexpression.  The fIendfR index identifies the first character
  331. after the matched subexpression.  If the subexpression matched the
  332. empty string, then fIstartfR and fIendfR will be equal.  If the
  333. subexpression did not participate in the match, then fIstartfR and
  334. fIendfR will be set to -1.
  335. .PP
  336. The fIextendStartfR field in fBTcl_RegExpInfofR is only set if the
  337. fBTCL_REG_CANMATCHfR flag was used.  It indicates the first
  338. character in the string where a match could occur.  If a match was
  339. found, this will be the same as the beginning of the current match.
  340. If no match was found, then it indicates the earliest point at which a
  341. match might occur if additional text is appended to the string.  If it
  342. is no match is possible even with further text, this field will be set 
  343. to -1.
  344. .VE 8.1
  345. .SH "SEE ALSO"
  346. re_syntax(n)
  347. .SH KEYWORDS
  348. match, pattern, regular expression, string, subexpression, Tcl_RegExpIndices, Tcl_RegExpInfo