6 |
and semantics are as close as possible to those of the Perl 5 language. |
and semantics are as close as possible to those of the Perl 5 language. |
7 |
|
|
8 |
Written by Philip Hazel |
Written by Philip Hazel |
9 |
Copyright (c) 1997-2007 University of Cambridge |
Copyright (c) 1997-2008 University of Cambridge |
10 |
|
|
11 |
----------------------------------------------------------------------------- |
----------------------------------------------------------------------------- |
12 |
Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
126 |
REG_BADPAT, /* (?+ or (?- must be followed by a non-zero number */ |
REG_BADPAT, /* (?+ or (?- must be followed by a non-zero number */ |
127 |
REG_BADPAT, /* number is too big */ |
REG_BADPAT, /* number is too big */ |
128 |
REG_BADPAT, /* subpattern name expected */ |
REG_BADPAT, /* subpattern name expected */ |
129 |
REG_BADPAT /* digit expected after (?+ */ |
REG_BADPAT, /* digit expected after (?+ */ |
130 |
|
REG_BADPAT /* ] is an invalid data character in JavaScript compatibility mode */ |
131 |
}; |
}; |
132 |
|
|
133 |
/* Table of texts corresponding to POSIX error codes */ |
/* Table of texts corresponding to POSIX error codes */ |
160 |
* Translate error code to string * |
* Translate error code to string * |
161 |
*************************************************/ |
*************************************************/ |
162 |
|
|
163 |
PCREPOSIX_EXP_DEFN size_t |
PCREPOSIX_EXP_DEFN size_t PCRE_CALL_CONVENTION |
164 |
regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) |
regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) |
165 |
{ |
{ |
166 |
const char *message, *addmessage; |
const char *message, *addmessage; |
195 |
* Free store held by a regex * |
* Free store held by a regex * |
196 |
*************************************************/ |
*************************************************/ |
197 |
|
|
198 |
PCREPOSIX_EXP_DEFN void |
PCREPOSIX_EXP_DEFN void PCRE_CALL_CONVENTION |
199 |
regfree(regex_t *preg) |
regfree(regex_t *preg) |
200 |
{ |
{ |
201 |
(pcre_free)(preg->re_pcre); |
(pcre_free)(preg->re_pcre); |
218 |
various non-zero codes on failure |
various non-zero codes on failure |
219 |
*/ |
*/ |
220 |
|
|
221 |
PCREPOSIX_EXP_DEFN int |
PCREPOSIX_EXP_DEFN int PCRE_CALL_CONVENTION |
222 |
regcomp(regex_t *preg, const char *pattern, int cflags) |
regcomp(regex_t *preg, const char *pattern, int cflags) |
223 |
{ |
{ |
224 |
const char *errorptr; |
const char *errorptr; |
260 |
be set. When this is the case, the nmatch and pmatch arguments are ignored, and |
be set. When this is the case, the nmatch and pmatch arguments are ignored, and |
261 |
the only result is yes/no/error. */ |
the only result is yes/no/error. */ |
262 |
|
|
263 |
PCREPOSIX_EXP_DEFN int |
PCREPOSIX_EXP_DEFN int PCRE_CALL_CONVENTION |
264 |
regexec(const regex_t *preg, const char *string, size_t nmatch, |
regexec(const regex_t *preg, const char *string, size_t nmatch, |
265 |
regmatch_t pmatch[], int eflags) |
regmatch_t pmatch[], int eflags) |
266 |
{ |
{ |
267 |
int rc; |
int rc, so, eo; |
268 |
int options = 0; |
int options = 0; |
269 |
int *ovector = NULL; |
int *ovector = NULL; |
270 |
int small_ovector[POSIX_MALLOC_THRESHOLD * 3]; |
int small_ovector[POSIX_MALLOC_THRESHOLD * 3]; |
297 |
} |
} |
298 |
} |
} |
299 |
|
|
300 |
rc = pcre_exec((const pcre *)preg->re_pcre, NULL, string, (int)strlen(string), |
/* REG_STARTEND is a BSD extension, to allow for non-NUL-terminated strings. |
301 |
|
The man page from OS X says "REG_STARTEND affects only the location of the |
302 |
|
string, not how it is matched". That is why the "so" value is used to bump the |
303 |
|
start location rather than being passed as a PCRE "starting offset". */ |
304 |
|
|
305 |
|
if ((eflags & REG_STARTEND) != 0) |
306 |
|
{ |
307 |
|
so = pmatch[0].rm_so; |
308 |
|
eo = pmatch[0].rm_eo; |
309 |
|
} |
310 |
|
else |
311 |
|
{ |
312 |
|
so = 0; |
313 |
|
eo = strlen(string); |
314 |
|
} |
315 |
|
|
316 |
|
rc = pcre_exec((const pcre *)preg->re_pcre, NULL, string + so, (eo - so), |
317 |
0, options, ovector, nmatch * 3); |
0, options, ovector, nmatch * 3); |
318 |
|
|
319 |
if (rc == 0) rc = nmatch; /* All captured slots were filled in */ |
if (rc == 0) rc = nmatch; /* All captured slots were filled in */ |