Browse Source
Removing ext/ereg and dependencies
Removing ext/ereg and dependencies
Affected extensions: - opcache (use pcre) - mbstring (removed ereg functions overloading) - pgsql (use pcre) - reflection (test cases using 'ereg') SAPI: - apache (header only) - apache_hooks (header only)pull/814/head
122 changed files with 40 additions and 15068 deletions
-
2ext/ereg/CREDITS
-
12ext/ereg/config.w32
-
56ext/ereg/config0.m4
-
771ext/ereg/ereg.c
-
64ext/ereg/php_ereg.h
-
65ext/ereg/php_regex.h
-
72ext/ereg/regex.patch
-
20ext/ereg/regex/COPYRIGHT
-
32ext/ereg/regex/README
-
92ext/ereg/regex/WHATSNEW
-
30ext/ereg/regex/cclass.h
-
102ext/ereg/regex/cname.h
-
242ext/ereg/regex/debug.c
-
14ext/ereg/regex/debug.ih
-
1019ext/ereg/regex/engine.c
-
35ext/ereg/regex/engine.ih
-
510ext/ereg/regex/main.c
-
19ext/ereg/regex/main.ih
-
76ext/ereg/regex/mkh
-
1613ext/ereg/regex/regcomp.c
-
53ext/ereg/regex/regcomp.ih
-
130ext/ereg/regex/regerror.c
-
12ext/ereg/regex/regerror.ih
-
502ext/ereg/regex/regex.3
-
233ext/ereg/regex/regex.7
-
106ext/ereg/regex/regex.dsp
-
29ext/ereg/regex/regex.dsw
-
85ext/ereg/regex/regex.h
-
304ext/ereg/regex/regex.mak
-
140ext/ereg/regex/regex2.h
-
138ext/ereg/regex/regexec.c
-
37ext/ereg/regex/regfree.c
-
316ext/ereg/regex/split.c
-
475ext/ereg/regex/tests
-
23ext/ereg/regex/utils.h
-
8ext/ereg/tests/001.phpt
-
8ext/ereg/tests/002.phpt
-
9ext/ereg/tests/003.phpt
-
17ext/ereg/tests/004.phpt
-
19ext/ereg/tests/005.phpt
-
9ext/ereg/tests/006.phpt
-
11ext/ereg/tests/007.phpt
-
9ext/ereg/tests/008.phpt
-
18ext/ereg/tests/009.phpt
-
8ext/ereg/tests/010.phpt
-
8ext/ereg/tests/011.phpt
-
8ext/ereg/tests/012.phpt
-
8ext/ereg/tests/013.phpt
-
8ext/ereg/tests/014.phpt
-
7ext/ereg/tests/015.phpt
-
7ext/ereg/tests/016.phpt
-
153ext/ereg/tests/ereg_basic_001.phpt
-
82ext/ereg/tests/ereg_basic_002.phpt
-
28ext/ereg/tests/ereg_basic_003.phpt
-
44ext/ereg/tests/ereg_basic_004.phpt
-
49ext/ereg/tests/ereg_error_001.phpt
-
118ext/ereg/tests/ereg_error_002.phpt
-
86ext/ereg/tests/ereg_replace_basic_001.phpt
-
41ext/ereg/tests/ereg_replace_basic_002.phpt
-
46ext/ereg/tests/ereg_replace_error_001.phpt
-
106ext/ereg/tests/ereg_replace_error_002.phpt
-
205ext/ereg/tests/ereg_replace_variation_001.phpt
-
193ext/ereg/tests/ereg_replace_variation_002.phpt
-
198ext/ereg/tests/ereg_replace_variation_003.phpt
-
208ext/ereg/tests/ereg_variation_001.phpt
-
198ext/ereg/tests/ereg_variation_002.phpt
-
305ext/ereg/tests/ereg_variation_003.phpt
-
19ext/ereg/tests/ereg_variation_004.phpt
-
45ext/ereg/tests/eregi_basic.phpt
-
153ext/ereg/tests/eregi_basic_001.phpt
-
82ext/ereg/tests/eregi_basic_002.phpt
-
28ext/ereg/tests/eregi_basic_003.phpt
-
40ext/ereg/tests/eregi_basic_004.phpt
-
49ext/ereg/tests/eregi_error_001.phpt
-
118ext/ereg/tests/eregi_error_002.phpt
-
38ext/ereg/tests/eregi_replace_basic.phpt
-
86ext/ereg/tests/eregi_replace_basic_001.phpt
-
37ext/ereg/tests/eregi_replace_basic_002.phpt
-
46ext/ereg/tests/eregi_replace_error_001.phpt
-
106ext/ereg/tests/eregi_replace_error_002.phpt
-
205ext/ereg/tests/eregi_replace_variation_001.phpt
-
193ext/ereg/tests/eregi_replace_variation_002.phpt
-
198ext/ereg/tests/eregi_replace_variation_003.phpt
-
208ext/ereg/tests/eregi_variation_001.phpt
-
198ext/ereg/tests/eregi_variation_002.phpt
-
305ext/ereg/tests/eregi_variation_003.phpt
-
19ext/ereg/tests/eregi_variation_004.phpt
-
24ext/ereg/tests/regular_expressions.inc
-
155ext/ereg/tests/split_basic_001.phpt
-
253ext/ereg/tests/split_basic_002.phpt
-
59ext/ereg/tests/split_basic_003.phpt
-
45ext/ereg/tests/split_error_001.phpt
-
118ext/ereg/tests/split_error_002.phpt
-
257ext/ereg/tests/split_variation_001.phpt
-
257ext/ereg/tests/split_variation_002.phpt
-
231ext/ereg/tests/split_variation_003.phpt
-
37ext/ereg/tests/split_variation_004.phpt
-
155ext/ereg/tests/spliti_basic_001.phpt
-
253ext/ereg/tests/spliti_basic_002.phpt
-
52ext/ereg/tests/spliti_basic_003.phpt
@ -1,2 +0,0 @@ |
|||
ereg |
|||
Rasmus Lerdorf, Jim Winstead, Jaakko Hyvätti |
|||
@ -1,12 +0,0 @@ |
|||
// $Id$ |
|||
// vim:ft=javascript |
|||
|
|||
ARG_WITH("ereg", "POSIX extended regular expressions", "yes"); |
|||
if (PHP_EREG != "no") { |
|||
|
|||
EXTENSION("ereg", "ereg.c", PHP_EREG_SHARED, "-Dregexec=php_regexec -Dregerror=php_regerror -Dregfree=php_regfree -Dregcomp=php_regcomp -Iext/ereg/regex"); |
|||
ADD_SOURCES("ext/ereg/regex", "regcomp.c regexec.c regerror.c regfree.c", "ereg"); |
|||
AC_DEFINE('REGEX', 1, 'Bundled regex'); |
|||
AC_DEFINE('HSREGEX', 1, 'Bundled regex'); |
|||
PHP_INSTALL_HEADERS("ext/ereg", "php_ereg.h php_regex.h regex/"); |
|||
} |
|||
@ -1,56 +0,0 @@ |
|||
dnl $Id$ |
|||
dnl config.m4 for extension ereg |
|||
|
|||
dnl |
|||
dnl Check for regex library type |
|||
dnl |
|||
PHP_ARG_WITH(regex,, |
|||
[ --with-regex=TYPE Regex library type: system, php. [TYPE=php] |
|||
WARNING: Do NOT use unless you know what you are doing!], php, no) |
|||
|
|||
case $PHP_REGEX in |
|||
system) |
|||
if test "$PHP_SAPI" = "apache" || test "$PHP_SAPI" = "apache2filter" || test "$PHP_SAPI" = "apache2handler"; then |
|||
REGEX_TYPE=php |
|||
else |
|||
REGEX_TYPE=system |
|||
fi |
|||
;; |
|||
yes | php) |
|||
REGEX_TYPE=php |
|||
;; |
|||
*) |
|||
REGEX_TYPE=php |
|||
AC_MSG_WARN([Invalid regex library type selected. Using default value: php]) |
|||
;; |
|||
esac |
|||
|
|||
AC_MSG_CHECKING([which regex library to use]) |
|||
AC_MSG_RESULT([$REGEX_TYPE]) |
|||
|
|||
if test "$REGEX_TYPE" = "php"; then |
|||
ereg_regex_sources="regex/regcomp.c regex/regexec.c regex/regerror.c regex/regfree.c" |
|||
ereg_regex_headers="regex/" |
|||
PHP_EREG_CFLAGS="-Dregexec=php_regexec -Dregerror=php_regerror -Dregfree=php_regfree -Dregcomp=php_regcomp" |
|||
fi |
|||
|
|||
PHP_NEW_EXTENSION(ereg, ereg.c $ereg_regex_sources, no,,$PHP_EREG_CFLAGS) |
|||
PHP_INSTALL_HEADERS([ext/ereg], [php_ereg.h php_regex.h $ereg_regex_headers]) |
|||
|
|||
if test "$REGEX_TYPE" = "php"; then |
|||
AC_DEFINE(HAVE_REGEX_T_RE_MAGIC, 1, [ ]) |
|||
AC_DEFINE(HSREGEX,1,[ ]) |
|||
AC_DEFINE(REGEX,1,[ ]) |
|||
PHP_ADD_BUILD_DIR([$ext_builddir/regex], 1) |
|||
PHP_ADD_INCLUDE([$ext_srcdir/regex]) |
|||
elif test "$REGEX_TYPE" = "system"; then |
|||
AC_DEFINE(REGEX,0,[ ]) |
|||
dnl Check if field re_magic exists in struct regex_t |
|||
AC_CACHE_CHECK([whether field re_magic exists in struct regex_t], ac_cv_regex_t_re_magic, [ |
|||
AC_TRY_COMPILE([#include <sys/types.h> |
|||
#include <regex.h>], [regex_t rt; rt.re_magic;], |
|||
[ac_cv_regex_t_re_magic=yes], [ac_cv_regex_t_re_magic=no])]) |
|||
if test "$ac_cv_regex_t_re_magic" = "yes"; then |
|||
AC_DEFINE([HAVE_REGEX_T_RE_MAGIC], [ ], 1) |
|||
fi |
|||
fi |
|||
@ -1,771 +0,0 @@ |
|||
/* |
|||
+----------------------------------------------------------------------+ |
|||
| PHP Version 5 | |
|||
+----------------------------------------------------------------------+ |
|||
| Copyright (c) 1997-2014 The PHP Group | |
|||
+----------------------------------------------------------------------+ |
|||
| This source file is subject to version 3.01 of the PHP license, | |
|||
| that is bundled with this package in the file LICENSE, and is | |
|||
| available through the world-wide-web at the following url: | |
|||
| http://www.php.net/license/3_01.txt | |
|||
| If you did not receive a copy of the PHP license and are unable to | |
|||
| obtain it through the world-wide-web, please send a note to | |
|||
| license@php.net so we can mail you a copy immediately. | |
|||
+----------------------------------------------------------------------+ |
|||
| Authors: Rasmus Lerdorf <rasmus@php.net> | |
|||
| Jim Winstead <jimw@php.net> | |
|||
| Jaakko Hyvätti <jaakko@hyvatti.iki.fi> | |
|||
+----------------------------------------------------------------------+ |
|||
*/ |
|||
/* $Id$ */ |
|||
|
|||
#include <stdio.h> |
|||
#include <ctype.h> |
|||
#include "php.h" |
|||
#include "ext/standard/php_string.h" |
|||
#include "php_ereg.h" |
|||
#include "ext/standard/info.h" |
|||
|
|||
/* {{{ arginfo */ |
|||
ZEND_BEGIN_ARG_INFO_EX(arginfo_ereg, 0, 0, 2) |
|||
ZEND_ARG_INFO(0, pattern) |
|||
ZEND_ARG_INFO(0, string) |
|||
ZEND_ARG_INFO(1, registers) /* ARRAY_INFO(1, registers, 1) */ |
|||
ZEND_END_ARG_INFO() |
|||
|
|||
ZEND_BEGIN_ARG_INFO(arginfo_ereg_replace, 0) |
|||
ZEND_ARG_INFO(0, pattern) |
|||
ZEND_ARG_INFO(0, replacement) |
|||
ZEND_ARG_INFO(0, string) |
|||
ZEND_END_ARG_INFO() |
|||
|
|||
ZEND_BEGIN_ARG_INFO_EX(arginfo_split, 0, 0, 2) |
|||
ZEND_ARG_INFO(0, pattern) |
|||
ZEND_ARG_INFO(0, string) |
|||
ZEND_ARG_INFO(0, limit) |
|||
ZEND_END_ARG_INFO() |
|||
|
|||
ZEND_BEGIN_ARG_INFO(arginfo_sql_regcase, 0) |
|||
ZEND_ARG_INFO(0, string) |
|||
ZEND_END_ARG_INFO() |
|||
/* }}} */ |
|||
|
|||
/* {{{ Function table */ |
|||
const zend_function_entry ereg_functions[] = { |
|||
PHP_DEP_FE(ereg, arginfo_ereg) |
|||
PHP_DEP_FE(ereg_replace, arginfo_ereg_replace) |
|||
PHP_DEP_FE(eregi, arginfo_ereg) |
|||
PHP_DEP_FE(eregi_replace, arginfo_ereg_replace) |
|||
PHP_DEP_FE(split, arginfo_split) |
|||
PHP_DEP_FE(spliti, arginfo_split) |
|||
PHP_DEP_FE(sql_regcase, arginfo_sql_regcase) |
|||
PHP_FE_END |
|||
}; |
|||
/* }}} */ |
|||
|
|||
/* {{{ reg_cache */ |
|||
typedef struct { |
|||
regex_t preg; |
|||
int cflags; |
|||
unsigned long lastuse; |
|||
} reg_cache; |
|||
static int reg_magic = 0; |
|||
#define EREG_CACHE_SIZE 4096 |
|||
/* }}} */ |
|||
|
|||
ZEND_DECLARE_MODULE_GLOBALS(ereg) |
|||
static PHP_GINIT_FUNCTION(ereg); |
|||
static PHP_GSHUTDOWN_FUNCTION(ereg); |
|||
|
|||
/* {{{ Module entry */ |
|||
zend_module_entry ereg_module_entry = { |
|||
STANDARD_MODULE_HEADER, |
|||
"ereg", |
|||
ereg_functions, |
|||
NULL, |
|||
NULL, |
|||
NULL, |
|||
NULL, |
|||
PHP_MINFO(ereg), |
|||
NO_VERSION_YET, |
|||
PHP_MODULE_GLOBALS(ereg), |
|||
PHP_GINIT(ereg), |
|||
PHP_GSHUTDOWN(ereg), |
|||
NULL, |
|||
STANDARD_MODULE_PROPERTIES_EX |
|||
}; |
|||
/* }}} */ |
|||
|
|||
/* {{{ COMPILE_DL_EREG */ |
|||
#ifdef COMPILE_DL_EREG |
|||
ZEND_GET_MODULE(ereg) |
|||
#endif |
|||
/* }}} */ |
|||
|
|||
/* {{{ ereg_lru_cmp */ |
|||
static int ereg_lru_cmp(const void *a, const void *b TSRMLS_DC) |
|||
{ |
|||
Bucket *f = (Bucket *) a; |
|||
Bucket *s = (Bucket *) b; |
|||
|
|||
if (((reg_cache *)Z_PTR(f->val))->lastuse < |
|||
((reg_cache *)Z_PTR(s->val))->lastuse) { |
|||
return -1; |
|||
} else if (((reg_cache *)Z_PTR(f->val))->lastuse == |
|||
((reg_cache *)Z_PTR(s->val))->lastuse) { |
|||
return 0; |
|||
} else { |
|||
return 1; |
|||
} |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ static ereg_clean_cache */ |
|||
static int ereg_clean_cache(zval *data, void *arg TSRMLS_DC) |
|||
{ |
|||
int *num_clean = (int *)arg; |
|||
|
|||
if (*num_clean > 0) { |
|||
(*num_clean)--; |
|||
return ZEND_HASH_APPLY_REMOVE; |
|||
} else { |
|||
return ZEND_HASH_APPLY_STOP; |
|||
} |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ _php_regcomp |
|||
*/ |
|||
static int _php_regcomp(regex_t *preg, const char *pattern, int cflags TSRMLS_DC) |
|||
{ |
|||
int r = 0; |
|||
int patlen = strlen(pattern); |
|||
reg_cache *rc = NULL; |
|||
|
|||
if (zend_hash_num_elements(&EREG(ht_rc)) >= EREG_CACHE_SIZE) { |
|||
/* easier than dealing with overflow as it happens */ |
|||
if (EREG(lru_counter) >= (1 << 31) || zend_hash_sort(&EREG(ht_rc), zend_qsort, ereg_lru_cmp, 0 TSRMLS_CC) == FAILURE) { |
|||
zend_hash_clean(&EREG(ht_rc)); |
|||
EREG(lru_counter) = 0; |
|||
} else { |
|||
int num_clean = EREG_CACHE_SIZE / 4; |
|||
zend_hash_apply_with_argument(&EREG(ht_rc), ereg_clean_cache, &num_clean TSRMLS_CC); |
|||
} |
|||
} |
|||
|
|||
rc = zend_hash_str_find_ptr(&EREG(ht_rc), pattern, patlen); |
|||
if (rc |
|||
&& rc->cflags == cflags) { |
|||
#ifdef HAVE_REGEX_T_RE_MAGIC |
|||
/* |
|||
* We use a saved magic number to see whether cache is corrupted, and if it |
|||
* is, we flush it and compile the pattern from scratch. |
|||
*/ |
|||
if (rc->preg.re_magic != reg_magic) { |
|||
zend_hash_clean(&EREG(ht_rc)); |
|||
EREG(lru_counter) = 0; |
|||
} else { |
|||
memcpy(preg, &rc->preg, sizeof(*preg)); |
|||
return r; |
|||
} |
|||
} |
|||
|
|||
r = regcomp(preg, pattern, cflags); |
|||
if(!r) { |
|||
reg_cache rcp; |
|||
|
|||
rcp.cflags = cflags; |
|||
rcp.lastuse = ++(EREG(lru_counter)); |
|||
memcpy(&rcp.preg, preg, sizeof(*preg)); |
|||
/* |
|||
* Since we don't have access to the actual MAGIC1 definition in the private |
|||
* header file, we save the magic value immediately after compilation. Hopefully, |
|||
* it's good. |
|||
*/ |
|||
if (!reg_magic) reg_magic = preg->re_magic; |
|||
zend_hash_str_update_mem(&EREG(ht_rc), pattern, patlen, |
|||
&rcp, sizeof(rcp)); |
|||
} |
|||
#else |
|||
memcpy(preg, &rc->preg, sizeof(*preg)); |
|||
} else { |
|||
r = regcomp(preg, pattern, cflags); |
|||
if(!r) { |
|||
reg_cache rcp; |
|||
|
|||
rcp.cflags = cflags; |
|||
rcp.lastuse = ++(EREG(lru_counter)); |
|||
memcpy(&rcp.preg, preg, sizeof(*preg)); |
|||
zend_hash_str_update_mem(&EREG(ht_rc), pattern, patlen, |
|||
&rcp, sizeof(rcp)); |
|||
} |
|||
} |
|||
#endif |
|||
return r; |
|||
} |
|||
/* }}} */ |
|||
|
|||
static void _free_ereg_cache(zval *zv) |
|||
{ |
|||
reg_cache *rc = Z_PTR_P(zv); |
|||
regfree(&rc->preg); |
|||
free(rc); |
|||
} |
|||
|
|||
#undef regfree |
|||
#define regfree(a); |
|||
#undef regcomp |
|||
#define regcomp(a, b, c) _php_regcomp(a, b, c TSRMLS_CC) |
|||
|
|||
/* {{{ PHP_GINIT_FUNCTION |
|||
*/ |
|||
static PHP_GINIT_FUNCTION(ereg) |
|||
{ |
|||
zend_hash_init(&ereg_globals->ht_rc, 0, NULL, _free_ereg_cache, 1); |
|||
ereg_globals->lru_counter = 0; |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ PHP_GSHUTDOWN_FUNCTION |
|||
*/ |
|||
static PHP_GSHUTDOWN_FUNCTION(ereg) |
|||
{ |
|||
zend_hash_destroy(&ereg_globals->ht_rc); |
|||
} |
|||
/* }}} */ |
|||
|
|||
PHP_MINFO_FUNCTION(ereg) |
|||
{ |
|||
php_info_print_table_start(); |
|||
#if HSREGEX |
|||
php_info_print_table_row(2, "Regex Library", "Bundled library enabled"); |
|||
#else |
|||
php_info_print_table_row(2, "Regex Library", "System library enabled"); |
|||
#endif |
|||
php_info_print_table_end(); |
|||
} |
|||
|
|||
|
|||
/* {{{ php_ereg_eprint |
|||
* php_ereg_eprint - convert error number to name |
|||
*/ |
|||
static void php_ereg_eprint(int err, regex_t *re TSRMLS_DC) { |
|||
char *buf = NULL, *message = NULL; |
|||
size_t len; |
|||
size_t buf_len; |
|||
|
|||
#ifdef REG_ITOA |
|||
/* get the length of the message */ |
|||
buf_len = regerror(REG_ITOA | err, re, NULL, 0); |
|||
if (buf_len) { |
|||
buf = (char *)safe_emalloc(buf_len, sizeof(char), 0); |
|||
if (!buf) return; /* fail silently */ |
|||
/* finally, get the error message */ |
|||
regerror(REG_ITOA | err, re, buf, buf_len); |
|||
} |
|||
#else |
|||
buf_len = 0; |
|||
#endif |
|||
len = regerror(err, re, NULL, 0); |
|||
if (len) { |
|||
message = (char *)safe_emalloc((buf_len + len + 2), sizeof(char), 0); |
|||
if (!message) { |
|||
return; /* fail silently */ |
|||
} |
|||
if (buf_len) { |
|||
snprintf(message, buf_len, "%s: ", buf); |
|||
buf_len += 1; /* so pointer math below works */ |
|||
} |
|||
/* drop the message into place */ |
|||
regerror(err, re, message + buf_len, len); |
|||
|
|||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", message); |
|||
} |
|||
|
|||
if (buf) efree(buf); |
|||
if (message) efree(message); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ php_ereg |
|||
*/ |
|||
static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int icase) |
|||
{ |
|||
zval *regex, /* Regular expression */ |
|||
*array = NULL; /* Optional register array */ |
|||
char *findin; /* String to apply expression to */ |
|||
size_t findin_len; |
|||
regex_t re; |
|||
regmatch_t *subs; |
|||
int err, match_len, string_len; |
|||
uint i; |
|||
int copts = 0; |
|||
off_t start, end; |
|||
char *buf = NULL; |
|||
char *string = NULL; |
|||
int argc = ZEND_NUM_ARGS(); |
|||
|
|||
if (zend_parse_parameters(argc TSRMLS_CC, "zs|z/", ®ex, &findin, &findin_len, &array) == FAILURE) { |
|||
return; |
|||
} |
|||
|
|||
if (icase) { |
|||
copts |= REG_ICASE; |
|||
} |
|||
|
|||
if (argc == 2) { |
|||
copts |= REG_NOSUB; |
|||
} |
|||
|
|||
/* compile the regular expression from the supplied regex */ |
|||
if (Z_TYPE_P(regex) == IS_STRING) { |
|||
err = regcomp(&re, Z_STRVAL_P(regex), REG_EXTENDED | copts); |
|||
} else { |
|||
/* we convert numbers to integers and treat them as a string */ |
|||
if (Z_TYPE_P(regex) == IS_DOUBLE) { |
|||
convert_to_long_ex(regex); /* get rid of decimal places */ |
|||
} |
|||
convert_to_string_ex(regex); |
|||
/* don't bother doing an extended regex with just a number */ |
|||
err = regcomp(&re, Z_STRVAL_P(regex), copts); |
|||
} |
|||
|
|||
if (err) { |
|||
php_ereg_eprint(err, &re TSRMLS_CC); |
|||
RETURN_FALSE; |
|||
} |
|||
|
|||
/* make a copy of the string we're looking in */ |
|||
string = estrndup(findin, findin_len); |
|||
|
|||
/* allocate storage for (sub-)expression-matches */ |
|||
subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1); |
|||
|
|||
/* actually execute the regular expression */ |
|||
err = regexec(&re, string, re.re_nsub+1, subs, 0); |
|||
if (err && err != REG_NOMATCH) { |
|||
php_ereg_eprint(err, &re TSRMLS_CC); |
|||
regfree(&re); |
|||
efree(subs); |
|||
RETURN_FALSE; |
|||
} |
|||
match_len = 1; |
|||
|
|||
if (array && err != REG_NOMATCH) { |
|||
match_len = (int) (subs[0].rm_eo - subs[0].rm_so); |
|||
string_len = findin_len + 1; |
|||
|
|||
buf = emalloc(string_len); |
|||
|
|||
zval_dtor(array); /* start with clean array */ |
|||
array_init(array); |
|||
|
|||
for (i = 0; i <= re.re_nsub; i++) { |
|||
start = subs[i].rm_so; |
|||
end = subs[i].rm_eo; |
|||
if (start != -1 && end > 0 && start < string_len && end < string_len && start < end) { |
|||
add_index_stringl(array, i, string+start, end-start); |
|||
} else { |
|||
add_index_bool(array, i, 0); |
|||
} |
|||
} |
|||
efree(buf); |
|||
} |
|||
|
|||
efree(subs); |
|||
efree(string); |
|||
if (err == REG_NOMATCH) { |
|||
RETVAL_FALSE; |
|||
} else { |
|||
if (match_len == 0) |
|||
match_len = 1; |
|||
RETVAL_LONG(match_len); |
|||
} |
|||
regfree(&re); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ proto int ereg(string pattern, string string [, array registers]) |
|||
Regular expression match */ |
|||
PHP_FUNCTION(ereg) |
|||
{ |
|||
php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ proto int eregi(string pattern, string string [, array registers]) |
|||
Case-insensitive regular expression match */ |
|||
PHP_FUNCTION(eregi) |
|||
{ |
|||
php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ php_ereg_replace |
|||
* this is the meat and potatoes of regex replacement! */ |
|||
PHP_EREG_API char *php_ereg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended TSRMLS_DC) |
|||
{ |
|||
regex_t re; |
|||
regmatch_t *subs; |
|||
|
|||
char *buf, /* buf is where we build the replaced string */ |
|||
*nbuf, /* nbuf is used when we grow the buffer */ |
|||
*walkbuf; /* used to walk buf when replacing backrefs */ |
|||
const char *walk; /* used to walk replacement string for backrefs */ |
|||
int buf_len; |
|||
int pos, tmp, string_len, new_l; |
|||
int err, copts = 0; |
|||
|
|||
string_len = strlen(string); |
|||
|
|||
if (icase) { |
|||
copts = REG_ICASE; |
|||
} |
|||
if (extended) { |
|||
copts |= REG_EXTENDED; |
|||
} |
|||
|
|||
err = regcomp(&re, pattern, copts); |
|||
if (err) { |
|||
php_ereg_eprint(err, &re TSRMLS_CC); |
|||
return ((char *) -1); |
|||
} |
|||
|
|||
|
|||
/* allocate storage for (sub-)expression-matches */ |
|||
subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1); |
|||
|
|||
/* start with a buffer that is twice the size of the stringo |
|||
we're doing replacements in */ |
|||
buf_len = 2 * string_len + 1; |
|||
buf = safe_emalloc(buf_len, sizeof(char), 0); |
|||
|
|||
err = pos = 0; |
|||
buf[0] = '\0'; |
|||
while (!err) { |
|||
err = regexec(&re, &string[pos], re.re_nsub+1, subs, (pos ? REG_NOTBOL : 0)); |
|||
|
|||
if (err && err != REG_NOMATCH) { |
|||
php_ereg_eprint(err, &re TSRMLS_CC); |
|||
efree(subs); |
|||
efree(buf); |
|||
regfree(&re); |
|||
return ((char *) -1); |
|||
} |
|||
|
|||
if (!err) { |
|||
/* backref replacement is done in two passes: |
|||
1) find out how long the string will be, and allocate buf |
|||
2) copy the part before match, replacement and backrefs to buf |
|||
|
|||
Jaakko Hyvätti <Jaakko.Hyvatti@iki.fi> |
|||
*/ |
|||
|
|||
new_l = strlen(buf) + subs[0].rm_so; /* part before the match */ |
|||
walk = replace; |
|||
while (*walk) { |
|||
if ('\\' == *walk && isdigit((unsigned char)walk[1]) && ((unsigned char)walk[1]) - '0' <= (int)re.re_nsub) { |
|||
if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1) { |
|||
new_l += subs[walk[1] - '0'].rm_eo - subs[walk[1] - '0'].rm_so; |
|||
} |
|||
walk += 2; |
|||
} else { |
|||
new_l++; |
|||
walk++; |
|||
} |
|||
} |
|||
if (new_l + 1 > buf_len) { |
|||
buf_len = 1 + buf_len + 2 * new_l; |
|||
nbuf = emalloc(buf_len); |
|||
strncpy(nbuf, buf, buf_len - 1); |
|||
nbuf[buf_len - 1] = '\0'; |
|||
efree(buf); |
|||
buf = nbuf; |
|||
} |
|||
tmp = strlen(buf); |
|||
/* copy the part of the string before the match */ |
|||
strncat(buf, &string[pos], subs[0].rm_so); |
|||
|
|||
/* copy replacement and backrefs */ |
|||
walkbuf = &buf[tmp + subs[0].rm_so]; |
|||
walk = replace; |
|||
while (*walk) { |
|||
if ('\\' == *walk && isdigit((unsigned char)walk[1]) && (unsigned char)walk[1] - '0' <= (int)re.re_nsub) { |
|||
if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1 |
|||
/* this next case shouldn't happen. it does. */ |
|||
&& subs[walk[1] - '0'].rm_so <= subs[walk[1] - '0'].rm_eo) { |
|||
|
|||
tmp = subs[walk[1] - '0'].rm_eo - subs[walk[1] - '0'].rm_so; |
|||
memcpy (walkbuf, &string[pos + subs[walk[1] - '0'].rm_so], tmp); |
|||
walkbuf += tmp; |
|||
} |
|||
walk += 2; |
|||
} else { |
|||
*walkbuf++ = *walk++; |
|||
} |
|||
} |
|||
*walkbuf = '\0'; |
|||
|
|||
/* and get ready to keep looking for replacements */ |
|||
if (subs[0].rm_so == subs[0].rm_eo) { |
|||
if (subs[0].rm_so + pos >= string_len) { |
|||
break; |
|||
} |
|||
new_l = strlen (buf) + 1; |
|||
if (new_l + 1 > buf_len) { |
|||
buf_len = 1 + buf_len + 2 * new_l; |
|||
nbuf = safe_emalloc(buf_len, sizeof(char), 0); |
|||
strncpy(nbuf, buf, buf_len-1); |
|||
efree(buf); |
|||
buf = nbuf; |
|||
} |
|||
pos += subs[0].rm_eo + 1; |
|||
buf [new_l-1] = string [pos-1]; |
|||
buf [new_l] = '\0'; |
|||
} else { |
|||
pos += subs[0].rm_eo; |
|||
} |
|||
} else { /* REG_NOMATCH */ |
|||
new_l = strlen(buf) + strlen(&string[pos]); |
|||
if (new_l + 1 > buf_len) { |
|||
buf_len = new_l + 1; /* now we know exactly how long it is */ |
|||
nbuf = safe_emalloc(buf_len, sizeof(char), 0); |
|||
strncpy(nbuf, buf, buf_len-1); |
|||
efree(buf); |
|||
buf = nbuf; |
|||
} |
|||
/* stick that last bit of string on our output */ |
|||
strlcat(buf, &string[pos], buf_len); |
|||
} |
|||
} |
|||
|
|||
/* don't want to leak memory .. */ |
|||
efree(subs); |
|||
regfree(&re); |
|||
|
|||
/* whew. */ |
|||
return (buf); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ php_do_ereg_replace |
|||
*/ |
|||
static void php_do_ereg_replace(INTERNAL_FUNCTION_PARAMETERS, int icase) |
|||
{ |
|||
zval *arg_pattern, |
|||
*arg_replace; |
|||
zend_string *pattern, *arg_string; |
|||
zend_string *string; |
|||
zend_string *replace; |
|||
char *ret; |
|||
|
|||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zzS", &arg_pattern, &arg_replace, &arg_string) == FAILURE) { |
|||
return; |
|||
} |
|||
|
|||
if (Z_TYPE_P(arg_pattern) == IS_STRING) { |
|||
if (Z_STRVAL_P(arg_pattern) && Z_STRLEN_P(arg_pattern)) { |
|||
pattern = zend_string_copy(Z_STR_P(arg_pattern)); |
|||
} else { |
|||
pattern = STR_EMPTY_ALLOC(); |
|||
} |
|||
} else { |
|||
convert_to_long_ex(arg_pattern); |
|||
pattern = zend_string_alloc(1, 0); |
|||
pattern->val[0] = (char) Z_LVAL_P(arg_pattern); |
|||
pattern->val[1] = '\0'; |
|||
} |
|||
|
|||
if (Z_TYPE_P(arg_replace) == IS_STRING) { |
|||
if (Z_STRVAL_P(arg_replace) && Z_STRLEN_P(arg_replace)) { |
|||
replace = zend_string_copy(Z_STR_P(arg_replace)); |
|||
} else { |
|||
replace = STR_EMPTY_ALLOC(); |
|||
} |
|||
} else { |
|||
convert_to_long_ex(arg_replace); |
|||
replace = zend_string_alloc(1, 0); |
|||
replace->val[0] = (char) Z_LVAL_P(arg_replace); |
|||
replace->val[1] = '\0'; |
|||
} |
|||
|
|||
if (arg_string) { |
|||
string = zend_string_copy(arg_string); |
|||
} else { |
|||
string = STR_EMPTY_ALLOC(); |
|||
} |
|||
|
|||
/* do the actual work */ |
|||
ret = php_ereg_replace(pattern->val, replace->val, string->val, icase, 1 TSRMLS_CC); |
|||
if (ret == (char *) -1) { |
|||
RETVAL_FALSE; |
|||
} else { |
|||
RETVAL_STRING(ret); |
|||
efree(ret); |
|||
} |
|||
|
|||
zend_string_release(string); |
|||
zend_string_release(replace); |
|||
zend_string_release(pattern); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ proto string ereg_replace(string pattern, string replacement, string string) |
|||
Replace regular expression */ |
|||
PHP_FUNCTION(ereg_replace) |
|||
{ |
|||
php_do_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ proto string eregi_replace(string pattern, string replacement, string string) |
|||
Case insensitive replace regular expression */ |
|||
PHP_FUNCTION(eregi_replace) |
|||
{ |
|||
php_do_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ php_split |
|||
*/ |
|||
static void php_split(INTERNAL_FUNCTION_PARAMETERS, int icase) |
|||
{ |
|||
zend_long count = -1; |
|||
regex_t re; |
|||
regmatch_t subs[1]; |
|||
char *spliton, *str, *strp, *endp; |
|||
size_t spliton_len, str_len; |
|||
int err, size, copts = 0; |
|||
|
|||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &spliton, &spliton_len, &str, &str_len, &count) == FAILURE) { |
|||
return; |
|||
} |
|||
|
|||
if (icase) { |
|||
copts = REG_ICASE; |
|||
} |
|||
|
|||
strp = str; |
|||
endp = strp + str_len; |
|||
|
|||
err = regcomp(&re, spliton, REG_EXTENDED | copts); |
|||
if (err) { |
|||
php_ereg_eprint(err, &re TSRMLS_CC); |
|||
RETURN_FALSE; |
|||
} |
|||
|
|||
array_init(return_value); |
|||
|
|||
/* churn through str, generating array entries as we go */ |
|||
while ((count == -1 || count > 1) && !(err = regexec(&re, strp, 1, subs, 0))) { |
|||
if (subs[0].rm_so == 0 && subs[0].rm_eo) { |
|||
/* match is at start of string, return empty string */ |
|||
add_next_index_stringl(return_value, "", 0); |
|||
/* skip ahead the length of the regex match */ |
|||
strp += subs[0].rm_eo; |
|||
} else if (subs[0].rm_so == 0 && subs[0].rm_eo == 0) { |
|||
/* No more matches */ |
|||
regfree(&re); |
|||
|
|||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Regular Expression"); |
|||
|
|||
zend_hash_destroy(Z_ARRVAL_P(return_value)); |
|||
efree(Z_ARR_P(return_value)); |
|||
RETURN_FALSE; |
|||
} else { |
|||
/* On a real match */ |
|||
|
|||
/* make a copy of the substring */ |
|||
size = subs[0].rm_so; |
|||
|
|||
/* add it to the array */ |
|||
add_next_index_stringl(return_value, strp, size); |
|||
|
|||
/* point at our new starting point */ |
|||
strp = strp + subs[0].rm_eo; |
|||
} |
|||
|
|||
/* if we're only looking for a certain number of points, |
|||
stop looking once we hit it */ |
|||
if (count != -1) { |
|||
count--; |
|||
} |
|||
} |
|||
|
|||
/* see if we encountered an error */ |
|||
if (err && err != REG_NOMATCH) { |
|||
php_ereg_eprint(err, &re TSRMLS_CC); |
|||
regfree(&re); |
|||
zend_hash_destroy(Z_ARRVAL_P(return_value)); |
|||
efree(Z_ARR_P(return_value)); |
|||
RETURN_FALSE; |
|||
} |
|||
|
|||
/* otherwise we just have one last element to add to the array */ |
|||
size = endp - strp; |
|||
|
|||
add_next_index_stringl(return_value, strp, size); |
|||
|
|||
regfree(&re); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ proto array split(string pattern, string string [, int limit]) |
|||
Split string into array by regular expression */ |
|||
PHP_FUNCTION(split) |
|||
{ |
|||
php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* {{{ proto array spliti(string pattern, string string [, int limit]) |
|||
Split string into array by regular expression case-insensitive */ |
|||
|
|||
PHP_FUNCTION(spliti) |
|||
{ |
|||
php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); |
|||
} |
|||
|
|||
/* }}} */ |
|||
|
|||
/* {{{ proto string sql_regcase(string string) |
|||
Make regular expression for case insensitive match */ |
|||
PHP_EREG_API PHP_FUNCTION(sql_regcase) |
|||
{ |
|||
char *string, *tmp; |
|||
size_t string_len; |
|||
unsigned char c; |
|||
register int i, j; |
|||
|
|||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &string, &string_len) == FAILURE) { |
|||
return; |
|||
} |
|||
|
|||
tmp = safe_emalloc(string_len, 4, 1); |
|||
|
|||
for (i = j = 0; i < string_len; i++) { |
|||
c = (unsigned char) string[i]; |
|||
if (isalpha(c)) { |
|||
tmp[j++] = '['; |
|||
tmp[j++] = toupper(c); |
|||
tmp[j++] = tolower(c); |
|||
tmp[j++] = ']'; |
|||
} else { |
|||
tmp[j++] = c; |
|||
} |
|||
} |
|||
tmp[j] = 0; |
|||
|
|||
RETVAL_STRINGL(tmp, j); |
|||
efree(tmp); |
|||
} |
|||
/* }}} */ |
|||
|
|||
/* |
|||
* Local variables: |
|||
* tab-width: 4 |
|||
* c-basic-offset: 4 |
|||
* End: |
|||
* vim600: noet sw=4 ts=4 fdm=marker |
|||
* vim<600: noet sw=4 ts=4 |
|||
*/ |
|||
@ -1,64 +0,0 @@ |
|||
/* |
|||
+----------------------------------------------------------------------+ |
|||
| PHP Version 5 | |
|||
+----------------------------------------------------------------------+ |
|||
| Copyright (c) 1997-2014 The PHP Group | |
|||
+----------------------------------------------------------------------+ |
|||
| This source file is subject to version 3.01 of the PHP license, | |
|||
| that is bundled with this package in the file LICENSE, and is | |
|||
| available through the world-wide-web at the following url: | |
|||
| http://www.php.net/license/3_01.txt | |
|||
| If you did not receive a copy of the PHP license and are unable to | |
|||
| obtain it through the world-wide-web, please send a note to | |
|||
| license@php.net so we can mail you a copy immediately. | |
|||
+----------------------------------------------------------------------+ |
|||
| Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> | |
|||
+----------------------------------------------------------------------+ |
|||
*/ |
|||
|
|||
|
|||
/* $Id$ */ |
|||
|
|||
#ifndef EREG_H |
|||
#define EREG_H |
|||
|
|||
#include "php_regex.h" |
|||
|
|||
extern zend_module_entry ereg_module_entry; |
|||
#define phpext_ereg_ptr &ereg_module_entry |
|||
|
|||
#ifdef PHP_WIN32 |
|||
# define PHP_EREG_API __declspec(dllexport) |
|||
#elif defined(__GNUC__) && __GNUC__ >= 4 |
|||
# define PHP_EREG_API __attribute__ ((visibility("default"))) |
|||
#else |
|||
# define PHP_EREG_API |
|||
#endif |
|||
|
|||
PHP_EREG_API char *php_ereg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended TSRMLS_DC); |
|||
|
|||
PHP_FUNCTION(ereg); |
|||
PHP_FUNCTION(eregi); |
|||
PHP_FUNCTION(eregi_replace); |
|||
PHP_FUNCTION(ereg_replace); |
|||
PHP_FUNCTION(split); |
|||
PHP_FUNCTION(spliti); |
|||
PHP_EREG_API PHP_FUNCTION(sql_regcase); |
|||
|
|||
ZEND_BEGIN_MODULE_GLOBALS(ereg) |
|||
HashTable ht_rc; |
|||
unsigned int lru_counter; |
|||
ZEND_END_MODULE_GLOBALS(ereg) |
|||
|
|||
/* Module functions */ |
|||
PHP_MINFO_FUNCTION(ereg); |
|||
|
|||
#ifdef ZTS |
|||
#define EREG(v) TSRMG(ereg_globals_id, zend_ereg_globals *, v) |
|||
#else |
|||
#define EREG(v) (ereg_globals.v) |
|||
#endif |
|||
|
|||
ZEND_EXTERN_MODULE_GLOBALS(ereg) |
|||
|
|||
#endif /* REG_H */ |
|||
@ -1,65 +0,0 @@ |
|||
/* |
|||
+----------------------------------------------------------------------+ |
|||
| PHP Version 5 | |
|||
+----------------------------------------------------------------------+ |
|||
| Copyright (c) 1997-2014 The PHP Group | |
|||
+----------------------------------------------------------------------+ |
|||
| This source file is subject to version 3.01 of the PHP license, | |
|||
| that is bundled with this package in the file LICENSE, and is | |
|||
| available through the world-wide-web at the following url: | |
|||
| http://www.php.net/license/3_01.txt | |
|||
| If you did not receive a copy of the PHP license and are unable to | |
|||
| obtain it through the world-wide-web, please send a note to | |
|||
| license@php.net so we can mail you a copy immediately. | |
|||
+----------------------------------------------------------------------+ |
|||
| Author: | |
|||
+----------------------------------------------------------------------+ |
|||
*/ |
|||
|
|||
/* $Id$ */ |
|||
|
|||
#ifndef PHP_REGEX_H |
|||
#define PHP_REGEX_H |
|||
|
|||
/* |
|||
* REGEX means: |
|||
* 0.. system regex |
|||
* 1.. bundled regex |
|||
*/ |
|||
|
|||
#if (REGEX == 1) |
|||
/* Define aliases */ |
|||
#define regexec php_regexec |
|||
#define regerror php_regerror |
|||
#define regfree php_regfree |
|||
#define regcomp php_regcomp |
|||
|
|||
#include "ext/ereg/regex/regex.h" |
|||
|
|||
#undef _PCREPOSIX_H |
|||
#define _PCREPOSIX_H 1 |
|||
|
|||
#ifndef _REGEX_H |
|||
#define _REGEX_H 1 /* this should stop Apache from loading the system version of regex.h */ |
|||
#endif |
|||
#ifndef _REGEX_H_ |
|||
#define _REGEX_H_ 1 |
|||
#endif |
|||
#ifndef _RX_H |
|||
#define _RX_H 1 /* Try defining these for Linux to */ |
|||
#endif |
|||
#ifndef __REGEXP_LIBRARY_H__ |
|||
#define __REGEXP_LIBRARY_H__ 1 /* avoid Apache including regex.h */ |
|||
#endif |
|||
#ifndef _H_REGEX |
|||
#define _H_REGEX 1 /* This one is for AIX */ |
|||
#endif |
|||
|
|||
#elif REGEX == 0 |
|||
#include <regex.h> |
|||
#ifndef _REGEX_H_ |
|||
#define _REGEX_H_ 1 |
|||
#endif |
|||
#endif |
|||
|
|||
#endif /* PHP_REGEX_H */ |
|||
@ -1,72 +0,0 @@ |
|||
diff -u regex.orig/regerror.c regex/regerror.c
|
|||
--- regex.orig/regerror.c 2011-08-09 19:49:30.000000000 +0800
|
|||
+++ regex/regerror.c 2011-08-12 10:45:57.000000000 +0800
|
|||
@@ -8,6 +8,7 @@
|
|||
#include "regex.h" |
|||
#include "utils.h" |
|||
#include "regerror.ih" |
|||
+#include "php.h"
|
|||
|
|||
/* |
|||
= #define REG_OKAY 0 |
|||
@@ -74,17 +75,19 @@
|
|||
char convbuf[50]; |
|||
|
|||
if (errcode == REG_ATOI) |
|||
- s = regatoi(preg, convbuf);
|
|||
+ s = regatoi(preg, convbuf, sizeof(convbuf));
|
|||
else { |
|||
for (r = rerrs; r->code >= 0; r++) |
|||
if (r->code == target) |
|||
break; |
|||
|
|||
if (errcode®_ITOA) { |
|||
- if (r->code >= 0)
|
|||
- (void) strcpy(convbuf, r->name);
|
|||
- else
|
|||
- sprintf(convbuf, "REG_0x%x", target);
|
|||
+ if (r->code >= 0) {
|
|||
+ (void) strncpy(convbuf, r->name, sizeof(convbuf) - 1);
|
|||
+ convbuf[sizeof(convbuf) - 1] = '\0';
|
|||
+ } else {
|
|||
+ snprintf(convbuf, sizeof(convbuf), "REG_0x%x", target);
|
|||
+ }
|
|||
assert(strlen(convbuf) < sizeof(convbuf)); |
|||
s = convbuf; |
|||
} else |
|||
@@ -106,12 +109,13 @@
|
|||
|
|||
/* |
|||
- regatoi - internal routine to implement REG_ATOI |
|||
- == static char *regatoi(const regex_t *preg, char *localbuf);
|
|||
+ == static char *regatoi(const regex_t *preg, char *localbuf, int bufsize);
|
|||
*/ |
|||
static char * |
|||
-regatoi(preg, localbuf)
|
|||
+regatoi(preg, localbuf, bufsize)
|
|||
const regex_t *preg; |
|||
char *localbuf; |
|||
+int bufsize;
|
|||
{ |
|||
register const struct rerr *r; |
|||
|
|||
@@ -121,6 +125,6 @@
|
|||
if (r->code < 0) |
|||
return("0"); |
|||
|
|||
- sprintf(localbuf, "%d", r->code);
|
|||
+ snprintf(localbuf, bufsize, "%d", r->code);
|
|||
return(localbuf); |
|||
} |
|||
diff -u regex.orig/regerror.ih regex/regerror.ih
|
|||
--- regex.orig/regerror.ih 2011-08-09 19:49:00.000000000 +0800
|
|||
+++ regex/regerror.ih 2011-08-09 19:41:07.000000000 +0800
|
|||
@@ -4,7 +4,7 @@
|
|||
#endif |
|||
|
|||
/* === regerror.c === */ |
|||
-static char *regatoi(const regex_t *preg, char *localbuf);
|
|||
+static char *regatoi(const regex_t *preg, char *localbuf, int bufsize);
|
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
@ -1,20 +0,0 @@ |
|||
Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved. |
|||
This software is not subject to any license of the American Telephone |
|||
and Telegraph Company or of the Regents of the University of California. |
|||
|
|||
Permission is granted to anyone to use this software for any purpose on |
|||
any computer system, and to alter it and redistribute it, subject |
|||
to the following restrictions: |
|||
|
|||
1. The author is not responsible for the consequences of use of this |
|||
software, no matter how awful, even if they arise from flaws in it. |
|||
|
|||
2. The origin of this software must not be misrepresented, either by |
|||
explicit claim or by omission. Since few users ever read sources, |
|||
credits must appear in the documentation. |
|||
|
|||
3. Altered versions must be plainly marked as such, and must not be |
|||
misrepresented as being the original software. Since few users |
|||
ever read sources, credits must appear in the documentation. |
|||
|
|||
4. This notice may not be removed or altered. |
|||
@ -1,32 +0,0 @@ |
|||
alpha3.4 release. |
|||
Thu Mar 17 23:17:18 EST 1994 |
|||
henry@zoo.toronto.edu |
|||
|
|||
See WHATSNEW for change listing. |
|||
|
|||
installation notes: |
|||
-------- |
|||
Read the comments at the beginning of Makefile before running. |
|||
|
|||
Utils.h contains some things that just might have to be modified on |
|||
some systems, as well as a nested include (ugh) of <assert.h>. |
|||
|
|||
The "fake" directory contains quick-and-dirty fakes for some header |
|||
files and routines that old systems may not have. Note also that |
|||
-DUSEBCOPY will make utils.h substitute bcopy() for memmove(). |
|||
|
|||
After that, "make r" will build regcomp.o, regexec.o, regfree.o, |
|||
and regerror.o (the actual routines), bundle them together into a test |
|||
program, and run regression tests on them. No output is good output. |
|||
|
|||
"make lib" builds just the .o files for the actual routines (when |
|||
you're happy with testing and have adjusted CFLAGS for production), |
|||
and puts them together into libregex.a. You can pick up either the |
|||
library or *.o ("make lib" makes sure there are no other .o files left |
|||
around to confuse things). |
|||
|
|||
Main.c, debug.c, split.c are used for regression testing but are not part |
|||
of the RE routines themselves. |
|||
|
|||
Regex.h goes in /usr/include. All other .h files are internal only. |
|||
-------- |
|||
@ -1,92 +0,0 @@ |
|||
New in alpha3.4: The complex bug alluded to below has been fixed (in a |
|||
slightly kludgey temporary way that may hurt efficiency a bit; this is |
|||
another "get it out the door for 4.4" release). The tests at the end of |
|||
the tests file have accordingly been uncommented. The primary sign of |
|||
the bug was that something like a?b matching ab matched b rather than ab. |
|||
(The bug was essentially specific to this exact situation, else it would |
|||
have shown up earlier.) |
|||
|
|||
New in alpha3.3: The definition of word boundaries has been altered |
|||
slightly, to more closely match the usual programming notion that "_" |
|||
is an alphabetic. Stuff used for pre-ANSI systems is now in a subdir, |
|||
and the makefile no longer alludes to it in mysterious ways. The |
|||
makefile has generally been cleaned up some. Fixes have been made |
|||
(again!) so that the regression test will run without -DREDEBUG, at |
|||
the cost of weaker checking. A workaround for a bug in some folks' |
|||
<assert.h> has been added. And some more things have been added to |
|||
tests, including a couple right at the end which are commented out |
|||
because the code currently flunks them (complex bug; fix coming). |
|||
Plus the usual minor cleanup. |
|||
|
|||
New in alpha3.2: Assorted bits of cleanup and portability improvement |
|||
(the development base is now a BSDI system using GCC instead of an ancient |
|||
Sun system, and the newer compiler exposed some glitches). Fix for a |
|||
serious bug that affected REs using many [] (including REG_ICASE REs |
|||
because of the way they are implemented), *sometimes*, depending on |
|||
memory-allocation patterns. The header-file prototypes no longer name |
|||
the parameters, avoiding possible name conflicts. The possibility that |
|||
some clot has defined CHAR_MIN as (say) `-128' instead of `(-128)' is |
|||
now handled gracefully. "uchar" is no longer used as an internal type |
|||
name (too many people have the same idea). Still the same old lousy |
|||
performance, alas. |
|||
|
|||
New in alpha3.1: Basically nothing, this release is just a bookkeeping |
|||
convenience. Stay tuned. |
|||
|
|||
New in alpha3.0: Performance is no better, alas, but some fixes have been |
|||
made and some functionality has been added. (This is basically the "get |
|||
it out the door in time for 4.4" release.) One bug fix: regfree() didn't |
|||
free the main internal structure (how embarrassing). It is now possible |
|||
to put NULs in either the RE or the target string, using (resp.) a new |
|||
REG_PEND flag and the old REG_STARTEND flag. The REG_NOSPEC flag to |
|||
regcomp() makes all characters ordinary, so you can match a literal |
|||
string easily (this will become more useful when performance improves!). |
|||
There are now primitives to match beginnings and ends of words, although |
|||
the syntax is disgusting and so is the implementation. The REG_ATOI |
|||
debugging interface has changed a bit. And there has been considerable |
|||
internal cleanup of various kinds. |
|||
|
|||
New in alpha2.3: Split change list out of README, and moved flags notes |
|||
into Makefile. Macro-ized the name of regex(7) in regex(3), since it has |
|||
to change for 4.4BSD. Cleanup work in engine.c, and some new regression |
|||
tests to catch tricky cases thereof. |
|||
|
|||
New in alpha2.2: Out-of-date manpages updated. Regerror() acquires two |
|||
small extensions -- REG_ITOA and REG_ATOI -- which avoid debugging kludges |
|||
in my own test program and might be useful to others for similar purposes. |
|||
The regression test will now compile (and run) without REDEBUG. The |
|||
BRE \$ bug is fixed. Most uses of "uchar" are gone; it's all chars now. |
|||
Char/uchar parameters are now written int/unsigned, to avoid possible |
|||
portability problems with unpromoted parameters. Some unsigned casts have |
|||
been introduced to minimize portability problems with shifting into sign |
|||
bits. |
|||
|
|||
New in alpha2.1: Lots of little stuff, cleanup and fixes. The one big |
|||
thing is that regex.h is now generated, using mkh, rather than being |
|||
supplied in the distribution; due to circularities in dependencies, |
|||
you have to build regex.h explicitly by "make h". The two known bugs |
|||
have been fixed (and the regression test now checks for them), as has a |
|||
problem with assertions not being suppressed in the absence of REDEBUG. |
|||
No performance work yet. |
|||
|
|||
New in alpha2: Backslash-anything is an ordinary character, not an |
|||
error (except, of course, for the handful of backslashed metacharacters |
|||
in BREs), which should reduce script breakage. The regression test |
|||
checks *where* null strings are supposed to match, and has generally |
|||
been tightened up somewhat. Small bug fixes in parameter passing (not |
|||
harmful, but technically errors) and some other areas. Debugging |
|||
invoked by defining REDEBUG rather than not defining NDEBUG. |
|||
|
|||
New in alpha+3: full prototyping for internal routines, using a little |
|||
helper program, mkh, which extracts prototypes given in stylized comments. |
|||
More minor cleanup. Buglet fix: it's CHAR_BIT, not CHAR_BITS. Simple |
|||
pre-screening of input when a literal string is known to be part of the |
|||
RE; this does wonders for performance. |
|||
|
|||
New in alpha+2: minor bits of cleanup. Notably, the number "32" for the |
|||
word width isn't hardwired into regexec.c any more, the public header |
|||
file prototypes the functions if __STDC__ is defined, and some small typos |
|||
in the manpages have been fixed. |
|||
|
|||
New in alpha+1: improvements to the manual pages, and an important |
|||
extension, the REG_STARTEND option to regexec(). |
|||
@ -1,30 +0,0 @@ |
|||
/* character-class table */ |
|||
static const struct cclass { |
|||
const unsigned char *name; |
|||
const unsigned char *chars; |
|||
const unsigned char *multis; |
|||
} cclasses[] = { |
|||
{"alnum", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", ""}, |
|||
{"alpha", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", |
|||
""}, |
|||
{"blank", " \t", ""}, |
|||
{"cntrl", "\007\b\t\n\v\f\r\1\2\3\4\5\6\16\17\20\21\22\23\24\ |
|||
\25\26\27\30\31\32\33\34\35\36\37\177", ""}, |
|||
{"digit", "0123456789", ""}, |
|||
{"graph", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ |
|||
0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", |
|||
""}, |
|||
{"lower", "abcdefghijklmnopqrstuvwxyz", |
|||
""}, |
|||
{"print", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ |
|||
0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ", |
|||
""}, |
|||
{"punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", |
|||
""}, |
|||
{"space", "\t\n\v\f\r ", ""}, |
|||
{"upper", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", |
|||
""}, |
|||
{"xdigit", "0123456789ABCDEFabcdef", |
|||
""}, |
|||
{NULL, 0, ""} |
|||
}; |
|||
@ -1,102 +0,0 @@ |
|||
/* character-name table */ |
|||
static const struct cname { |
|||
const char *name; |
|||
char code; |
|||
} cnames[] = { |
|||
{"NUL", '\0'}, |
|||
{"SOH", '\001'}, |
|||
{"STX", '\002'}, |
|||
{"ETX", '\003'}, |
|||
{"EOT", '\004'}, |
|||
{"ENQ", '\005'}, |
|||
{"ACK", '\006'}, |
|||
{"BEL", '\007'}, |
|||
{"alert", '\007'}, |
|||
{"BS", '\010'}, |
|||
{"backspace", '\b'}, |
|||
{"HT", '\011'}, |
|||
{"tab", '\t'}, |
|||
{"LF", '\012'}, |
|||
{"newline", '\n'}, |
|||
{"VT", '\013'}, |
|||
{"vertical-tab", '\v'}, |
|||
{"FF", '\014'}, |
|||
{"form-feed", '\f'}, |
|||
{"CR", '\015'}, |
|||
{"carriage-return", '\r'}, |
|||
{"SO", '\016'}, |
|||
{"SI", '\017'}, |
|||
{"DLE", '\020'}, |
|||
{"DC1", '\021'}, |
|||
{"DC2", '\022'}, |
|||
{"DC3", '\023'}, |
|||
{"DC4", '\024'}, |
|||
{"NAK", '\025'}, |
|||
{"SYN", '\026'}, |
|||
{"ETB", '\027'}, |
|||
{"CAN", '\030'}, |
|||
{"EM", '\031'}, |
|||
{"SUB", '\032'}, |
|||
{"ESC", '\033'}, |
|||
{"IS4", '\034'}, |
|||
{"FS", '\034'}, |
|||
{"IS3", '\035'}, |
|||
{"GS", '\035'}, |
|||
{"IS2", '\036'}, |
|||
{"RS", '\036'}, |
|||
{"IS1", '\037'}, |
|||
{"US", '\037'}, |
|||
{"space", ' '}, |
|||
{"exclamation-mark", '!'}, |
|||
{"quotation-mark", '"'}, |
|||
{"number-sign", '#'}, |
|||
{"dollar-sign", '$'}, |
|||
{"percent-sign", '%'}, |
|||
{"ampersand", '&'}, |
|||
{"apostrophe", '\''}, |
|||
{"left-parenthesis", '('}, |
|||
{"right-parenthesis", ')'}, |
|||
{"asterisk", '*'}, |
|||
{"plus-sign", '+'}, |
|||
{"comma", ','}, |
|||
{"hyphen", '-'}, |
|||
{"hyphen-minus", '-'}, |
|||
{"period", '.'}, |
|||
{"full-stop", '.'}, |
|||
{"slash", '/'}, |
|||
{"solidus", '/'}, |
|||
{"zero", '0'}, |
|||
{"one", '1'}, |
|||
{"two", '2'}, |
|||
{"three", '3'}, |
|||
{"four", '4'}, |
|||
{"five", '5'}, |
|||
{"six", '6'}, |
|||
{"seven", '7'}, |
|||
{"eight", '8'}, |
|||
{"nine", '9'}, |
|||
{"colon", ':'}, |
|||
{"semicolon", ';'}, |
|||
{"less-than-sign", '<'}, |
|||
{"equals-sign", '='}, |
|||
{"greater-than-sign", '>'}, |
|||
{"question-mark", '?'}, |
|||
{"commercial-at", '@'}, |
|||
{"left-square-bracket", '['}, |
|||
{"backslash", '\\'}, |
|||
{"reverse-solidus", '\\'}, |
|||
{"right-square-bracket", ']'}, |
|||
{"circumflex", '^'}, |
|||
{"circumflex-accent", '^'}, |
|||
{"underscore", '_'}, |
|||
{"low-line", '_'}, |
|||
{"grave-accent", '`'}, |
|||
{"left-brace", '{'}, |
|||
{"left-curly-bracket", '{'}, |
|||
{"vertical-line", '|'}, |
|||
{"right-brace", '}'}, |
|||
{"right-curly-bracket", '}'}, |
|||
{"tilde", '~'}, |
|||
{"DEL", '\177'}, |
|||
{NULL, 0}, |
|||
}; |
|||
@ -1,242 +0,0 @@ |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
#include <ctype.h> |
|||
#include <limits.h> |
|||
#include <stdlib.h> |
|||
#include <sys/types.h> |
|||
#include <regex.h> |
|||
|
|||
#include "utils.h" |
|||
#include "regex2.h" |
|||
#include "debug.ih" |
|||
|
|||
/* |
|||
- regprint - print a regexp for debugging |
|||
== void regprint(regex_t *r, FILE *d); |
|||
*/ |
|||
void |
|||
regprint(r, d) |
|||
regex_t *r; |
|||
FILE *d; |
|||
{ |
|||
register struct re_guts *g = r->re_g; |
|||
register int i; |
|||
register int c; |
|||
register int last; |
|||
int nincat[NC]; |
|||
|
|||
fprintf(d, "%ld states, %d categories", (long)g->nstates, |
|||
g->ncategories); |
|||
fprintf(d, ", first %ld last %ld", (long)g->firststate, |
|||
(long)g->laststate); |
|||
if (g->iflags&USEBOL) |
|||
fprintf(d, ", USEBOL"); |
|||
if (g->iflags&USEEOL) |
|||
fprintf(d, ", USEEOL"); |
|||
if (g->iflags&BAD) |
|||
fprintf(d, ", BAD"); |
|||
if (g->nsub > 0) |
|||
fprintf(d, ", nsub=%ld", (long)g->nsub); |
|||
if (g->must != NULL) |
|||
fprintf(d, ", must(%ld) `%*s'", (long)g->mlen, (int)g->mlen, |
|||
g->must); |
|||
if (g->backrefs) |
|||
fprintf(d, ", backrefs"); |
|||
if (g->nplus > 0) |
|||
fprintf(d, ", nplus %ld", (long)g->nplus); |
|||
fprintf(d, "\n"); |
|||
s_print(g, d); |
|||
for (i = 0; i < g->ncategories; i++) { |
|||
nincat[i] = 0; |
|||
for (c = CHAR_MIN; c <= CHAR_MAX; c++) |
|||
if (g->categories[c] == i) |
|||
nincat[i]++; |
|||
} |
|||
fprintf(d, "cc0#%d", nincat[0]); |
|||
for (i = 1; i < g->ncategories; i++) |
|||
if (nincat[i] == 1) { |
|||
for (c = CHAR_MIN; c <= CHAR_MAX; c++) |
|||
if (g->categories[c] == i) |
|||
break; |
|||
fprintf(d, ", %d=%s", i, regchar(c)); |
|||
} |
|||
fprintf(d, "\n"); |
|||
for (i = 1; i < g->ncategories; i++) |
|||
if (nincat[i] != 1) { |
|||
fprintf(d, "cc%d\t", i); |
|||
last = -1; |
|||
for (c = CHAR_MIN; c <= CHAR_MAX+1; c++) /* +1 does flush */ |
|||
if (c <= CHAR_MAX && g->categories[c] == i) { |
|||
if (last < 0) { |
|||
fprintf(d, "%s", regchar(c)); |
|||
last = c; |
|||
} |
|||
} else { |
|||
if (last >= 0) { |
|||
if (last != c-1) |
|||
fprintf(d, "-%s", |
|||
regchar(c-1)); |
|||
last = -1; |
|||
} |
|||
} |
|||
fprintf(d, "\n"); |
|||
} |
|||
} |
|||
|
|||
/* |
|||
- s_print - print the strip for debugging |
|||
== static void s_print(register struct re_guts *g, FILE *d); |
|||
*/ |
|||
static void |
|||
s_print(g, d) |
|||
register struct re_guts *g; |
|||
FILE *d; |
|||
{ |
|||
register sop *s; |
|||
register cset *cs; |
|||
register int i; |
|||
register int done = 0; |
|||
register sop opnd; |
|||
register int col = 0; |
|||
register int last; |
|||
register sopno offset = 2; |
|||
# define GAP() { if (offset % 5 == 0) { \ |
|||
if (col > 40) { \ |
|||
fprintf(d, "\n\t"); \ |
|||
col = 0; \ |
|||
} else { \ |
|||
fprintf(d, " "); \ |
|||
col++; \ |
|||
} \ |
|||
} else \ |
|||
col++; \ |
|||
offset++; \ |
|||
} |
|||
|
|||
if (OP(g->strip[0]) != OEND) |
|||
fprintf(d, "missing initial OEND!\n"); |
|||
for (s = &g->strip[1]; !done; s++) { |
|||
opnd = OPND(*s); |
|||
switch (OP(*s)) { |
|||
case OEND: |
|||
fprintf(d, "\n"); |
|||
done = 1; |
|||
break; |
|||
case OCHAR: |
|||
if (strchr("\\|()^$.[+*?{}!<> ", (char)opnd) != NULL) |
|||
fprintf(d, "\\%c", (unsigned char)opnd); |
|||
else |
|||
fprintf(d, "%s", regchar((unsigned char)opnd)); |
|||
break; |
|||
case OBOL: |
|||
fprintf(d, "^"); |
|||
break; |
|||
case OEOL: |
|||
fprintf(d, "$"); |
|||
break; |
|||
case OBOW: |
|||
fprintf(d, "\\{"); |
|||
break; |
|||
case OEOW: |
|||
fprintf(d, "\\}"); |
|||
break; |
|||
case OANY: |
|||
fprintf(d, "."); |
|||
break; |
|||
case OANYOF: |
|||
fprintf(d, "[(%ld)", (long)opnd); |
|||
cs = &g->sets[opnd]; |
|||
last = -1; |
|||
for (i = 0; i < g->csetsize+1; i++) /* +1 flushes */ |
|||
if (CHIN(cs, i) && i < g->csetsize) { |
|||
if (last < 0) { |
|||
fprintf(d, "%s", regchar(i)); |
|||
last = i; |
|||
} |
|||
} else { |
|||
if (last >= 0) { |
|||
if (last != i-1) |
|||
fprintf(d, "-%s", |
|||
regchar(i-1)); |
|||
last = -1; |
|||
} |
|||
} |
|||
fprintf(d, "]"); |
|||
break; |
|||
case OBACK_: |
|||
fprintf(d, "(\\<%ld>", (long)opnd); |
|||
break; |
|||
case O_BACK: |
|||
fprintf(d, "<%ld>\\)", (long)opnd); |
|||
break; |
|||
case OPLUS_: |
|||
fprintf(d, "(+"); |
|||
if (OP(*(s+opnd)) != O_PLUS) |
|||
fprintf(d, "<%ld>", (long)opnd); |
|||
break; |
|||
case O_PLUS: |
|||
if (OP(*(s-opnd)) != OPLUS_) |
|||
fprintf(d, "<%ld>", (long)opnd); |
|||
fprintf(d, "+)"); |
|||
break; |
|||
case OQUEST_: |
|||
fprintf(d, "(?"); |
|||
if (OP(*(s+opnd)) != O_QUEST) |
|||
fprintf(d, "<%ld>", (long)opnd); |
|||
break; |
|||
case O_QUEST: |
|||
if (OP(*(s-opnd)) != OQUEST_) |
|||
fprintf(d, "<%ld>", (long)opnd); |
|||
fprintf(d, "?)"); |
|||
break; |
|||
case OLPAREN: |
|||
fprintf(d, "((<%ld>", (long)opnd); |
|||
break; |
|||
case ORPAREN: |
|||
fprintf(d, "<%ld>))", (long)opnd); |
|||
break; |
|||
case OCH_: |
|||
fprintf(d, "<"); |
|||
if (OP(*(s+opnd)) != OOR2) |
|||
fprintf(d, "<%ld>", (long)opnd); |
|||
break; |
|||
case OOR1: |
|||
if (OP(*(s-opnd)) != OOR1 && OP(*(s-opnd)) != OCH_) |
|||
fprintf(d, "<%ld>", (long)opnd); |
|||
fprintf(d, "|"); |
|||
break; |
|||
case OOR2: |
|||
fprintf(d, "|"); |
|||
if (OP(*(s+opnd)) != OOR2 && OP(*(s+opnd)) != O_CH) |
|||
fprintf(d, "<%ld>", (long)opnd); |
|||
break; |
|||
case O_CH: |
|||
if (OP(*(s-opnd)) != OOR1) |
|||
fprintf(d, "<%ld>", (long)opnd); |
|||
fprintf(d, ">"); |
|||
break; |
|||
default: |
|||
fprintf(d, "!%ld(%ld)!", OP(*s), opnd); |
|||
break; |
|||
} |
|||
if (!done) |
|||
GAP(); |
|||
} |
|||
} |
|||
|
|||
/* |
|||
- regchar - make a character printable |
|||
== static char *regchar(int ch); |
|||
*/ |
|||
static unsigned char * /* -> representation */ |
|||
regchar(ch) |
|||
int ch; |
|||
{ |
|||
static unsigned char buf[10]; |
|||
|
|||
if (isprint(ch) || ch == ' ') |
|||
sprintf(buf, "%c", ch); |
|||
else |
|||
sprintf(buf, "\\%o", ch); |
|||
return(buf); |
|||
} |
|||
@ -1,14 +0,0 @@ |
|||
/* ========= begin header generated by ./mkh ========= */ |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/* === debug.c === */ |
|||
void regprint(regex_t *r, FILE *d); |
|||
static void s_print(register struct re_guts *g, FILE *d); |
|||
static char *regchar(int ch); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
/* ========= end header generated by ./mkh ========= */ |
|||
1019
ext/ereg/regex/engine.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,35 +0,0 @@ |
|||
/* ========= begin header generated by ./mkh ========= */ |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/* === engine.c === */ |
|||
static int matcher(register struct re_guts *g, unsigned char *string, size_t nmatch, regmatch_t pmatch[], int eflags); |
|||
static unsigned char *dissect(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst); |
|||
static unsigned char *backref(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst, sopno lev); |
|||
static unsigned char *fast(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst); |
|||
static unsigned char *slow(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst); |
|||
static states step(register struct re_guts *g, sopno start, sopno stop, register states bef, int ch, register states aft); |
|||
#define BOL (OUT+1) |
|||
#define EOL (BOL+1) |
|||
#define BOLEOL (BOL+2) |
|||
#define NOTHING (BOL+3) |
|||
#define BOW (BOL+4) |
|||
#define EOW (BOL+5) |
|||
#define CODEMAX (BOL+5) /* highest code used */ |
|||
#define NONCHAR(c) ((c) > UCHAR_MAX) |
|||
#define NNONCHAR (CODEMAX-UCHAR_MAX) |
|||
#ifdef REDEBUG |
|||
static void print(struct match *m, unsigned char *caption, states st, int ch, FILE *d); |
|||
#endif |
|||
#ifdef REDEBUG |
|||
static void at(struct match *m, unsigned char *title, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst); |
|||
#endif |
|||
#ifdef REDEBUG |
|||
static unsigned char *pchar(int ch); |
|||
#endif |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
/* ========= end header generated by ./mkh ========= */ |
|||
@ -1,510 +0,0 @@ |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
#include <sys/types.h> |
|||
#include <regex.h> |
|||
#include <assert.h> |
|||
#include <stdlib.h> |
|||
|
|||
#include "main.ih" |
|||
|
|||
char *progname; |
|||
int debug = 0; |
|||
int line = 0; |
|||
int status = 0; |
|||
|
|||
int copts = REG_EXTENDED; |
|||
int eopts = 0; |
|||
regoff_t startoff = 0; |
|||
regoff_t endoff = 0; |
|||
|
|||
|
|||
extern int split(); |
|||
extern void regprint(); |
|||
|
|||
/* |
|||
- main - do the simple case, hand off to regress() for regression |
|||
*/ |
|||
int main(argc, argv) |
|||
int argc; |
|||
char *argv[]; |
|||
{ |
|||
regex_t re; |
|||
# define NS 10 |
|||
regmatch_t subs[NS]; |
|||
char erbuf[100]; |
|||
int err; |
|||
size_t len; |
|||
int c; |
|||
int errflg = 0; |
|||
register int i; |
|||
extern int optind; |
|||
extern char *optarg; |
|||
|
|||
progname = argv[0]; |
|||
|
|||
while ((c = getopt(argc, argv, "c:e:S:E:x")) != EOF) |
|||
switch (c) { |
|||
case 'c': /* compile options */ |
|||
copts = options('c', optarg); |
|||
break; |
|||
case 'e': /* execute options */ |
|||
eopts = options('e', optarg); |
|||
break; |
|||
case 'S': /* start offset */ |
|||
startoff = (regoff_t)atoi(optarg); |
|||
break; |
|||
case 'E': /* end offset */ |
|||
endoff = (regoff_t)atoi(optarg); |
|||
break; |
|||
case 'x': /* Debugging. */ |
|||
debug++; |
|||
break; |
|||
case '?': |
|||
default: |
|||
errflg++; |
|||
break; |
|||
} |
|||
if (errflg) { |
|||
fprintf(stderr, "usage: %s ", progname); |
|||
fprintf(stderr, "[-c copt][-C][-d] [re]\n"); |
|||
exit(2); |
|||
} |
|||
|
|||
if (optind >= argc) { |
|||
regress(stdin); |
|||
exit(status); |
|||
} |
|||
|
|||
err = regcomp(&re, argv[optind++], copts); |
|||
if (err) { |
|||
len = regerror(err, &re, erbuf, sizeof(erbuf)); |
|||
fprintf(stderr, "error %s, %d/%d `%s'\n", |
|||
eprint(err), len, sizeof(erbuf), erbuf); |
|||
exit(status); |
|||
} |
|||
regprint(&re, stdout); |
|||
|
|||
if (optind >= argc) { |
|||
regfree(&re); |
|||
exit(status); |
|||
} |
|||
|
|||
if (eopts®_STARTEND) { |
|||
subs[0].rm_so = startoff; |
|||
subs[0].rm_eo = strlen(argv[optind]) - endoff; |
|||
} |
|||
err = regexec(&re, argv[optind], (size_t)NS, subs, eopts); |
|||
if (err) { |
|||
len = regerror(err, &re, erbuf, sizeof(erbuf)); |
|||
fprintf(stderr, "error %s, %d/%d `%s'\n", |
|||
eprint(err), len, sizeof(erbuf), erbuf); |
|||
exit(status); |
|||
} |
|||
if (!(copts®_NOSUB)) { |
|||
len = (int)(subs[0].rm_eo - subs[0].rm_so); |
|||
if (subs[0].rm_so != -1) { |
|||
if (len != 0) |
|||
printf("match `%.*s'\n", (int)len, |
|||
argv[optind] + subs[0].rm_so); |
|||
else |
|||
printf("match `'@%.1s\n", |
|||
argv[optind] + subs[0].rm_so); |
|||
} |
|||
for (i = 1; i < NS; i++) |
|||
if (subs[i].rm_so != -1) |
|||
printf("(%d) `%.*s'\n", i, |
|||
(int)(subs[i].rm_eo - subs[i].rm_so), |
|||
argv[optind] + subs[i].rm_so); |
|||
} |
|||
exit(status); |
|||
} |
|||
|
|||
/* |
|||
- regress - main loop of regression test |
|||
== void regress(FILE *in); |
|||
*/ |
|||
void |
|||
regress(in) |
|||
FILE *in; |
|||
{ |
|||
char inbuf[1000]; |
|||
# define MAXF 10 |
|||
char *f[MAXF]; |
|||
int nf; |
|||
int i; |
|||
char erbuf[100]; |
|||
size_t ne; |
|||
char *badpat = "invalid regular expression"; |
|||
# define SHORT 10 |
|||
char *bpname = "REG_BADPAT"; |
|||
regex_t re; |
|||
|
|||
while (fgets(inbuf, sizeof(inbuf), in) != NULL) { |
|||
line++; |
|||
if (inbuf[0] == '#' || inbuf[0] == '\n') |
|||
continue; /* NOTE CONTINUE */ |
|||
inbuf[strlen(inbuf)-1] = '\0'; /* get rid of stupid \n */ |
|||
if (debug) |
|||
fprintf(stdout, "%d:\n", line); |
|||
nf = split(inbuf, f, MAXF, "\t\t"); |
|||
if (nf < 3) { |
|||
fprintf(stderr, "bad input, line %d\n", line); |
|||
exit(1); |
|||
} |
|||
for (i = 0; i < nf; i++) |
|||
if (strcmp(f[i], "\"\"") == 0) |
|||
f[i] = ""; |
|||
if (nf <= 3) |
|||
f[3] = NULL; |
|||
if (nf <= 4) |
|||
f[4] = NULL; |
|||
try(f[0], f[1], f[2], f[3], f[4], options('c', f[1])); |
|||
if (opt('&', f[1])) /* try with either type of RE */ |
|||
try(f[0], f[1], f[2], f[3], f[4], |
|||
options('c', f[1]) &~ REG_EXTENDED); |
|||
} |
|||
|
|||
ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf)); |
|||
if (strcmp(erbuf, badpat) != 0 || ne != strlen(badpat)+1) { |
|||
fprintf(stderr, "end: regerror() test gave `%s' not `%s'\n", |
|||
erbuf, badpat); |
|||
status = 1; |
|||
} |
|||
ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, (size_t)SHORT); |
|||
if (strncmp(erbuf, badpat, SHORT-1) != 0 || erbuf[SHORT-1] != '\0' || |
|||
ne != strlen(badpat)+1) { |
|||
fprintf(stderr, "end: regerror() short test gave `%s' not `%.*s'\n", |
|||
erbuf, SHORT-1, badpat); |
|||
status = 1; |
|||
} |
|||
ne = regerror(REG_ITOA|REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf)); |
|||
if (strcmp(erbuf, bpname) != 0 || ne != strlen(bpname)+1) { |
|||
fprintf(stderr, "end: regerror() ITOA test gave `%s' not `%s'\n", |
|||
erbuf, bpname); |
|||
status = 1; |
|||
} |
|||
re.re_endp = bpname; |
|||
ne = regerror(REG_ATOI, &re, erbuf, sizeof(erbuf)); |
|||
if (atoi(erbuf) != (int)REG_BADPAT) { |
|||
fprintf(stderr, "end: regerror() ATOI test gave `%s' not `%ld'\n", |
|||
erbuf, (long)REG_BADPAT); |
|||
status = 1; |
|||
} else if (ne != strlen(erbuf)+1) { |
|||
fprintf(stderr, "end: regerror() ATOI test len(`%s') = %ld\n", |
|||
erbuf, (long)REG_BADPAT); |
|||
status = 1; |
|||
} |
|||
} |
|||
|
|||
/* |
|||
- try - try it, and report on problems |
|||
== void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts); |
|||
*/ |
|||
void |
|||
try(f0, f1, f2, f3, f4, opts) |
|||
char *f0; |
|||
char *f1; |
|||
char *f2; |
|||
char *f3; |
|||
char *f4; |
|||
int opts; /* may not match f1 */ |
|||
{ |
|||
regex_t re; |
|||
# define NSUBS 10 |
|||
regmatch_t subs[NSUBS]; |
|||
# define NSHOULD 15 |
|||
char *should[NSHOULD]; |
|||
int nshould; |
|||
char erbuf[100]; |
|||
int err; |
|||
int len; |
|||
char *type = (opts & REG_EXTENDED) ? "ERE" : "BRE"; |
|||
register int i; |
|||
char *grump; |
|||
char f0copy[1000]; |
|||
char f2copy[1000]; |
|||
|
|||
strcpy(f0copy, f0); |
|||
re.re_endp = (opts®_PEND) ? f0copy + strlen(f0copy) : NULL; |
|||
fixstr(f0copy); |
|||
err = regcomp(&re, f0copy, opts); |
|||
if (err != 0 && (!opt('C', f1) || err != efind(f2))) { |
|||
/* unexpected error or wrong error */ |
|||
len = regerror(err, &re, erbuf, sizeof(erbuf)); |
|||
fprintf(stderr, "%d: %s error %s, %d/%d `%s'\n", |
|||
line, type, eprint(err), len, |
|||
sizeof(erbuf), erbuf); |
|||
status = 1; |
|||
} else if (err == 0 && opt('C', f1)) { |
|||
/* unexpected success */ |
|||
fprintf(stderr, "%d: %s should have given REG_%s\n", |
|||
line, type, f2); |
|||
status = 1; |
|||
err = 1; /* so we won't try regexec */ |
|||
} |
|||
|
|||
if (err != 0) { |
|||
regfree(&re); |
|||
return; |
|||
} |
|||
|
|||
strcpy(f2copy, f2); |
|||
fixstr(f2copy); |
|||
|
|||
if (options('e', f1)®_STARTEND) { |
|||
if (strchr(f2, '(') == NULL || strchr(f2, ')') == NULL) |
|||
fprintf(stderr, "%d: bad STARTEND syntax\n", line); |
|||
subs[0].rm_so = strchr(f2, '(') - f2 + 1; |
|||
subs[0].rm_eo = strchr(f2, ')') - f2; |
|||
} |
|||
err = regexec(&re, f2copy, NSUBS, subs, options('e', f1)); |
|||
|
|||
if (err != 0 && (f3 != NULL || err != REG_NOMATCH)) { |
|||
/* unexpected error or wrong error */ |
|||
len = regerror(err, &re, erbuf, sizeof(erbuf)); |
|||
fprintf(stderr, "%d: %s exec error %s, %d/%d `%s'\n", |
|||
line, type, eprint(err), len, |
|||
sizeof(erbuf), erbuf); |
|||
status = 1; |
|||
} else if (err != 0) { |
|||
/* nothing more to check */ |
|||
} else if (f3 == NULL) { |
|||
/* unexpected success */ |
|||
fprintf(stderr, "%d: %s exec should have failed\n", |
|||
line, type); |
|||
status = 1; |
|||
err = 1; /* just on principle */ |
|||
} else if (opts®_NOSUB) { |
|||
/* nothing more to check */ |
|||
} else if ((grump = check(f2, subs[0], f3)) != NULL) { |
|||
fprintf(stderr, "%d: %s %s\n", line, type, grump); |
|||
status = 1; |
|||
err = 1; |
|||
} |
|||
|
|||
if (err != 0 || f4 == NULL) { |
|||
regfree(&re); |
|||
return; |
|||
} |
|||
|
|||
for (i = 1; i < NSHOULD; i++) |
|||
should[i] = NULL; |
|||
nshould = split(f4, should+1, NSHOULD-1, ","); |
|||
if (nshould == 0) { |
|||
nshould = 1; |
|||
should[1] = ""; |
|||
} |
|||
for (i = 1; i < NSUBS; i++) { |
|||
grump = check(f2, subs[i], should[i]); |
|||
if (grump != NULL) { |
|||
fprintf(stderr, "%d: %s $%d %s\n", line, |
|||
type, i, grump); |
|||
status = 1; |
|||
err = 1; |
|||
} |
|||
} |
|||
|
|||
regfree(&re); |
|||
} |
|||
|
|||
/* |
|||
- options - pick options out of a regression-test string |
|||
== int options(int type, char *s); |
|||
*/ |
|||
int |
|||
options(type, s) |
|||
int type; /* 'c' compile, 'e' exec */ |
|||
char *s; |
|||
{ |
|||
register char *p; |
|||
register int o = (type == 'c') ? copts : eopts; |
|||
register char *legal = (type == 'c') ? "bisnmp" : "^$#tl"; |
|||
|
|||
for (p = s; *p != '\0'; p++) |
|||
if (strchr(legal, *p) != NULL) |
|||
switch (*p) { |
|||
case 'b': |
|||
o &= ~REG_EXTENDED; |
|||
break; |
|||
case 'i': |
|||
o |= REG_ICASE; |
|||
break; |
|||
case 's': |
|||
o |= REG_NOSUB; |
|||
break; |
|||
case 'n': |
|||
o |= REG_NEWLINE; |
|||
break; |
|||
case 'm': |
|||
o &= ~REG_EXTENDED; |
|||
o |= REG_NOSPEC; |
|||
break; |
|||
case 'p': |
|||
o |= REG_PEND; |
|||
break; |
|||
case '^': |
|||
o |= REG_NOTBOL; |
|||
break; |
|||
case '$': |
|||
o |= REG_NOTEOL; |
|||
break; |
|||
case '#': |
|||
o |= REG_STARTEND; |
|||
break; |
|||
case 't': /* trace */ |
|||
o |= REG_TRACE; |
|||
break; |
|||
case 'l': /* force long representation */ |
|||
o |= REG_LARGE; |
|||
break; |
|||
case 'r': /* force backref use */ |
|||
o |= REG_BACKR; |
|||
break; |
|||
} |
|||
return(o); |
|||
} |
|||
|
|||
/* |
|||
- opt - is a particular option in a regression string? |
|||
== int opt(int c, char *s); |
|||
*/ |
|||
int /* predicate */ |
|||
opt(c, s) |
|||
int c; |
|||
char *s; |
|||
{ |
|||
return(strchr(s, c) != NULL); |
|||
} |
|||
|
|||
/* |
|||
- fixstr - transform magic characters in strings |
|||
== void fixstr(register char *p); |
|||
*/ |
|||
void |
|||
fixstr(p) |
|||
register char *p; |
|||
{ |
|||
if (p == NULL) |
|||
return; |
|||
|
|||
for (; *p != '\0'; p++) |
|||
if (*p == 'N') |
|||
*p = '\n'; |
|||
else if (*p == 'T') |
|||
*p = '\t'; |
|||
else if (*p == 'S') |
|||
*p = ' '; |
|||
else if (*p == 'Z') |
|||
*p = '\0'; |
|||
} |
|||
|
|||
/* |
|||
- check - check a substring match |
|||
== char *check(char *str, regmatch_t sub, char *should); |
|||
*/ |
|||
char * /* NULL or complaint */ |
|||
check(str, sub, should) |
|||
char *str; |
|||
regmatch_t sub; |
|||
char *should; |
|||
{ |
|||
register int len; |
|||
register int shlen; |
|||
register char *p; |
|||
static char grump[500]; |
|||
register char *at = NULL; |
|||
|
|||
if (should != NULL && strcmp(should, "-") == 0) |
|||
should = NULL; |
|||
if (should != NULL && should[0] == '@') { |
|||
at = should + 1; |
|||
should = ""; |
|||
} |
|||
|
|||
/* check rm_so and rm_eo for consistency */ |
|||
if (sub.rm_so > sub.rm_eo || (sub.rm_so == -1 && sub.rm_eo != -1) || |
|||
(sub.rm_so != -1 && sub.rm_eo == -1) || |
|||
(sub.rm_so != -1 && sub.rm_so < 0) || |
|||
(sub.rm_eo != -1 && sub.rm_eo < 0) ) { |
|||
sprintf(grump, "start %ld end %ld", (long)sub.rm_so, |
|||
(long)sub.rm_eo); |
|||
return(grump); |
|||
} |
|||
|
|||
/* check for no match */ |
|||
if (sub.rm_so == -1 && should == NULL) |
|||
return(NULL); |
|||
if (sub.rm_so == -1) |
|||
return("did not match"); |
|||
|
|||
/* check for in range */ |
|||
if (sub.rm_eo > strlen(str)) { |
|||
sprintf(grump, "start %ld end %ld, past end of string", |
|||
(long)sub.rm_so, (long)sub.rm_eo); |
|||
return(grump); |
|||
} |
|||
|
|||
len = (int)(sub.rm_eo - sub.rm_so); |
|||
shlen = (int)strlen(should); |
|||
p = str + sub.rm_so; |
|||
|
|||
/* check for not supposed to match */ |
|||
if (should == NULL) { |
|||
sprintf(grump, "matched `%.*s'", len, p); |
|||
return(grump); |
|||
} |
|||
|
|||
/* check for wrong match */ |
|||
if (len != shlen || strncmp(p, should, (size_t)shlen) != 0) { |
|||
sprintf(grump, "matched `%.*s' instead", len, p); |
|||
return(grump); |
|||
} |
|||
if (shlen > 0) |
|||
return(NULL); |
|||
|
|||
/* check null match in right place */ |
|||
if (at == NULL) |
|||
return(NULL); |
|||
shlen = strlen(at); |
|||
if (shlen == 0) |
|||
shlen = 1; /* force check for end-of-string */ |
|||
if (strncmp(p, at, shlen) != 0) { |
|||
sprintf(grump, "matched null at `%.20s'", p); |
|||
return(grump); |
|||
} |
|||
return(NULL); |
|||
} |
|||
|
|||
/* |
|||
- eprint - convert error number to name |
|||
== static char *eprint(int err); |
|||
*/ |
|||
static char * |
|||
eprint(err) |
|||
int err; |
|||
{ |
|||
static char epbuf[100]; |
|||
size_t len; |
|||
|
|||
len = regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf)); |
|||
assert(len <= sizeof(epbuf)); |
|||
return(epbuf); |
|||
} |
|||
|
|||
/* |
|||
- efind - convert error name to number |
|||
== static int efind(char *name); |
|||
*/ |
|||
static int |
|||
efind(name) |
|||
char *name; |
|||
{ |
|||
static char efbuf[100]; |
|||
regex_t re; |
|||
|
|||
sprintf(efbuf, "REG_%s", name); |
|||
assert(strlen(efbuf) < sizeof(efbuf)); |
|||
re.re_endp = efbuf; |
|||
(void) regerror(REG_ATOI, &re, efbuf, sizeof(efbuf)); |
|||
return(atoi(efbuf)); |
|||
} |
|||
@ -1,19 +0,0 @@ |
|||
/* ========= begin header generated by ./mkh ========= */ |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/* === main.c === */ |
|||
void regress(FILE *in); |
|||
void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts); |
|||
int options(int type, char *s); |
|||
int opt(int c, char *s); |
|||
void fixstr(register char *p); |
|||
char *check(char *str, regmatch_t sub, char *should); |
|||
static char *eprint(int err); |
|||
static int efind(char *name); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
/* ========= end header generated by ./mkh ========= */ |
|||
@ -1,76 +0,0 @@ |
|||
#! /bin/sh |
|||
# mkh - pull headers out of C source |
|||
PATH=/bin:/usr/bin ; export PATH |
|||
|
|||
# egrep pattern to pick out marked lines |
|||
egrep='^ =([ ]|$)' |
|||
|
|||
# Sed program to process marked lines into lines for the header file. |
|||
# The markers have already been removed. Two things are done here: removal |
|||
# of backslashed newlines, and some fudging of comments. The first is done |
|||
# because -o needs to have prototypes on one line to strip them down. |
|||
# Getting comments into the output is tricky; we turn C++-style // comments |
|||
# into /* */ comments, after altering any existing */'s to avoid trouble. |
|||
peel=' /\\$/N |
|||
/\\\n[ ]*/s///g |
|||
/\/\//s;\*/;* /;g |
|||
/\/\//s;//\(.*\);/*\1 */;' |
|||
|
|||
for a |
|||
do |
|||
case "$a" in |
|||
-o) # old (pre-function-prototype) compiler |
|||
# add code to comment out argument lists |
|||
peel="$peel |
|||
"'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);' |
|||
shift |
|||
;; |
|||
-b) # funny Berkeley __P macro |
|||
peel="$peel |
|||
"'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));' |
|||
shift |
|||
;; |
|||
-s) # compiler doesn't like `static foo();' |
|||
# add code to get rid of the `static' |
|||
peel="$peel |
|||
"'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;' |
|||
shift |
|||
;; |
|||
-p) # private declarations |
|||
egrep='^ ==([ ]|$)' |
|||
shift |
|||
;; |
|||
-i) # wrap in #ifndef, argument is name |
|||
ifndef="$2" |
|||
shift ; shift |
|||
;; |
|||
*) break |
|||
;; |
|||
esac |
|||
done |
|||
|
|||
if test " $ifndef" != " " |
|||
then |
|||
echo "#ifndef $ifndef" |
|||
echo "#define $ifndef /* never again */" |
|||
fi |
|||
echo "/* ========= begin header generated by $0 ========= */" |
|||
echo '#ifdef __cplusplus' |
|||
echo 'extern "C" {' |
|||
echo '#endif' |
|||
for f |
|||
do |
|||
echo |
|||
echo "/* === $f === */" |
|||
egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel" |
|||
echo |
|||
done |
|||
echo '#ifdef __cplusplus' |
|||
echo '}' |
|||
echo '#endif' |
|||
echo "/* ========= end header generated by $0 ========= */" |
|||
if test " $ifndef" != " " |
|||
then |
|||
echo "#endif" |
|||
fi |
|||
exit 0 |
|||
1613
ext/ereg/regex/regcomp.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,53 +0,0 @@ |
|||
/* ========= begin header generated by ./mkh ========= */ |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/* === regcomp.c === */ |
|||
static void p_ere(register struct parse *p, int stop); |
|||
static void p_ere_exp(register struct parse *p); |
|||
static void p_str(register struct parse *p); |
|||
static void p_bre(register struct parse *p, register int end1, register int end2); |
|||
static int p_simp_re(register struct parse *p, int starordinary); |
|||
static int p_count(register struct parse *p); |
|||
static void p_bracket(register struct parse *p); |
|||
static void p_b_term(register struct parse *p, register cset *cs); |
|||
static void p_b_cclass(register struct parse *p, register cset *cs); |
|||
static void p_b_eclass(register struct parse *p, register cset *cs); |
|||
static unsigned char p_b_symbol(register struct parse *p); |
|||
static unsigned char p_b_coll_elem(register struct parse *p, int endc); |
|||
static unsigned char othercase(int ch); |
|||
static void bothcases(register struct parse *p, int ch); |
|||
static void ordinary(register struct parse *p, register int ch); |
|||
static void nonnewline(register struct parse *p); |
|||
static void repeat(register struct parse *p, sopno start, int from, int to); |
|||
static int seterr(register struct parse *p, int e); |
|||
static cset *allocset(register struct parse *p); |
|||
static void freeset(register struct parse *p, register cset *cs); |
|||
static int freezeset(register struct parse *p, register cset *cs); |
|||
static int firstch(register struct parse *p, register cset *cs); |
|||
static int nch(register struct parse *p, register cset *cs); |
|||
static void mcadd(register struct parse *p, register cset *cs, register const unsigned char *cp); |
|||
#if 0 |
|||
static void mcsub(register cset *cs, register unsigned char *cp); |
|||
static int mcin(register cset *cs, register unsigned char *cp); |
|||
static unsigned char *mcfind(register cset *cs, register unsigned char *cp); |
|||
#endif |
|||
static void mcinvert(register struct parse *p, register cset *cs); |
|||
static void mccase(register struct parse *p, register cset *cs); |
|||
static int isinsets(register struct re_guts *g, int c); |
|||
static int samesets(register struct re_guts *g, int c1, int c2); |
|||
static void categorize(struct parse *p, register struct re_guts *g); |
|||
static sopno dupl(register struct parse *p, sopno start, sopno finish); |
|||
static void doemit(register struct parse *p, sop op, size_t opnd); |
|||
static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos); |
|||
static void dofwd(register struct parse *p, sopno pos, sop value); |
|||
static void enlarge(register struct parse *p, sopno size); |
|||
static void stripsnug(register struct parse *p, register struct re_guts *g); |
|||
static void findmust(register struct parse *p, register struct re_guts *g); |
|||
static sopno pluscount(register struct parse *p, register struct re_guts *g); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
/* ========= end header generated by ./mkh ========= */ |
|||
@ -1,130 +0,0 @@ |
|||
#include <sys/types.h> |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
#include <ctype.h> |
|||
#include <limits.h> |
|||
#include <stdlib.h> |
|||
|
|||
#include "regex.h" |
|||
#include "utils.h" |
|||
#include "regerror.ih" |
|||
#include "php.h" |
|||
|
|||
/* |
|||
= #define REG_OKAY 0 |
|||
= #define REG_NOMATCH 1 |
|||
= #define REG_BADPAT 2 |
|||
= #define REG_ECOLLATE 3 |
|||
= #define REG_ECTYPE 4 |
|||
= #define REG_EESCAPE 5 |
|||
= #define REG_ESUBREG 6 |
|||
= #define REG_EBRACK 7 |
|||
= #define REG_EPAREN 8 |
|||
= #define REG_EBRACE 9 |
|||
= #define REG_BADBR 10 |
|||
= #define REG_ERANGE 11 |
|||
= #define REG_ESPACE 12 |
|||
= #define REG_BADRPT 13 |
|||
= #define REG_EMPTY 14 |
|||
= #define REG_ASSERT 15 |
|||
= #define REG_INVARG 16 |
|||
= #define REG_ATOI 255 // convert name to number (!) |
|||
= #define REG_ITOA 0400 // convert number to name (!) |
|||
*/ |
|||
static const struct rerr { |
|||
int code; |
|||
const char *name; |
|||
const char *explain; |
|||
} rerrs[] = { |
|||
{REG_OKAY, "REG_OKAY", "no errors detected"}, |
|||
{REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match"}, |
|||
{REG_BADPAT, "REG_BADPAT", "invalid regular expression"}, |
|||
{REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element"}, |
|||
{REG_ECTYPE, "REG_ECTYPE", "invalid character class"}, |
|||
{REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)"}, |
|||
{REG_ESUBREG, "REG_ESUBREG", "invalid backreference number"}, |
|||
{REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced"}, |
|||
{REG_EPAREN, "REG_EPAREN", "parentheses not balanced"}, |
|||
{REG_EBRACE, "REG_EBRACE", "braces not balanced"}, |
|||
{REG_BADBR, "REG_BADBR", "invalid repetition count(s)"}, |
|||
{REG_ERANGE, "REG_ERANGE", "invalid character range"}, |
|||
{REG_ESPACE, "REG_ESPACE", "out of memory"}, |
|||
{REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid"}, |
|||
{REG_EMPTY, "REG_EMPTY", "empty (sub)expression"}, |
|||
{REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug"}, |
|||
{REG_INVARG, "REG_INVARG", "invalid argument to regex routine"}, |
|||
{-1, "", "*** unknown regexp error code ***"}, |
|||
}; |
|||
|
|||
/* |
|||
- regerror - the interface to error numbers |
|||
= API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t); |
|||
*/ |
|||
/* ARGSUSED */ |
|||
API_EXPORT(size_t) |
|||
regerror( |
|||
int errcode, |
|||
const regex_t *preg, |
|||
char *errbuf, |
|||
size_t errbuf_size) |
|||
{ |
|||
register const struct rerr *r; |
|||
register size_t len; |
|||
register int target = errcode &~ REG_ITOA; |
|||
register const char *s; |
|||
char convbuf[50]; |
|||
|
|||
if (errcode == REG_ATOI) |
|||
s = regatoi(preg, convbuf, sizeof(convbuf)); |
|||
else { |
|||
for (r = rerrs; r->code >= 0; r++) |
|||
if (r->code == target) |
|||
break; |
|||
|
|||
if (errcode®_ITOA) { |
|||
if (r->code >= 0) { |
|||
(void) strncpy(convbuf, r->name, sizeof(convbuf) - 1); |
|||
convbuf[sizeof(convbuf) - 1] = '\0'; |
|||
} else { |
|||
snprintf(convbuf, sizeof(convbuf), "REG_0x%x", target); |
|||
} |
|||
assert(strlen(convbuf) < sizeof(convbuf)); |
|||
s = convbuf; |
|||
} else |
|||
s = r->explain; |
|||
} |
|||
|
|||
len = strlen(s) + 1; |
|||
if (errbuf_size > 0) { |
|||
if (errbuf_size > len) |
|||
(void) strcpy(errbuf, s); |
|||
else { |
|||
(void) strncpy(errbuf, s, errbuf_size-1); |
|||
errbuf[errbuf_size-1] = '\0'; |
|||
} |
|||
} |
|||
|
|||
return(len); |
|||
} |
|||
|
|||
/* |
|||
- regatoi - internal routine to implement REG_ATOI |
|||
== static char *regatoi(const regex_t *preg, char *localbuf, int bufsize); |
|||
*/ |
|||
static char * |
|||
regatoi(preg, localbuf, bufsize) |
|||
const regex_t *preg; |
|||
char *localbuf; |
|||
int bufsize; |
|||
{ |
|||
register const struct rerr *r; |
|||
|
|||
for (r = rerrs; r->code >= 0; r++) |
|||
if (strcmp(r->name, preg->re_endp) == 0) |
|||
break; |
|||
if (r->code < 0) |
|||
return("0"); |
|||
|
|||
snprintf(localbuf, bufsize, "%d", r->code); |
|||
return(localbuf); |
|||
} |
|||
@ -1,12 +0,0 @@ |
|||
/* ========= begin header generated by ./mkh ========= */ |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/* === regerror.c === */ |
|||
static char *regatoi(const regex_t *preg, char *localbuf, int bufsize); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
/* ========= end header generated by ./mkh ========= */ |
|||
@ -1,502 +0,0 @@ |
|||
.TH REGEX 3 "17 May 1993" |
|||
.BY "Henry Spencer" |
|||
.de ZR |
|||
.\" one other place knows this name: the SEE ALSO section |
|||
.IR regex (7) \\$1 |
|||
.. |
|||
.SH NAME |
|||
regcomp, regexec, regerror, regfree \- regular-expression library |
|||
.SH SYNOPSIS |
|||
.ft B |
|||
.\".na |
|||
#include <sys/types.h> |
|||
.br |
|||
#include <regex.h> |
|||
.HP 10 |
|||
int regcomp(regex_t\ *preg, const\ char\ *pattern, int\ cflags); |
|||
.HP |
|||
int\ regexec(const\ regex_t\ *preg, const\ char\ *string, |
|||
size_t\ nmatch, regmatch_t\ pmatch[], int\ eflags); |
|||
.HP |
|||
size_t\ regerror(int\ errcode, const\ regex_t\ *preg, |
|||
char\ *errbuf, size_t\ errbuf_size); |
|||
.HP |
|||
void\ regfree(regex_t\ *preg); |
|||
.\".ad |
|||
.ft |
|||
.SH DESCRIPTION |
|||
These routines implement POSIX 1003.2 regular expressions (``RE''s); |
|||
see |
|||
.ZR . |
|||
.I Regcomp |
|||
compiles an RE written as a string into an internal form, |
|||
.I regexec |
|||
matches that internal form against a string and reports results, |
|||
.I regerror |
|||
transforms error codes from either into human-readable messages, |
|||
and |
|||
.I regfree |
|||
frees any dynamically-allocated storage used by the internal form |
|||
of an RE. |
|||
.PP |
|||
The header |
|||
.I <regex.h> |
|||
declares two structure types, |
|||
.I regex_t |
|||
and |
|||
.IR regmatch_t , |
|||
the former for compiled internal forms and the latter for match reporting. |
|||
It also declares the four functions, |
|||
a type |
|||
.IR regoff_t , |
|||
and a number of constants with names starting with ``REG_''. |
|||
.PP |
|||
.I Regcomp |
|||
compiles the regular expression contained in the |
|||
.I pattern |
|||
string, |
|||
subject to the flags in |
|||
.IR cflags , |
|||
and places the results in the |
|||
.I regex_t |
|||
structure pointed to by |
|||
.IR preg . |
|||
.I Cflags |
|||
is the bitwise OR of zero or more of the following flags: |
|||
.IP REG_EXTENDED \w'REG_EXTENDED'u+2n |
|||
Compile modern (``extended'') REs, |
|||
rather than the obsolete (``basic'') REs that |
|||
are the default. |
|||
.IP REG_BASIC |
|||
This is a synonym for 0, |
|||
provided as a counterpart to REG_EXTENDED to improve readability. |
|||
.IP REG_NOSPEC |
|||
Compile with recognition of all special characters turned off. |
|||
All characters are thus considered ordinary, |
|||
so the ``RE'' is a literal string. |
|||
This is an extension, |
|||
compatible with but not specified by POSIX 1003.2, |
|||
and should be used with |
|||
caution in software intended to be portable to other systems. |
|||
REG_EXTENDED and REG_NOSPEC may not be used |
|||
in the same call to |
|||
.IR regcomp . |
|||
.IP REG_ICASE |
|||
Compile for matching that ignores upper/lower case distinctions. |
|||
See |
|||
.ZR . |
|||
.IP REG_NOSUB |
|||
Compile for matching that need only report success or failure, |
|||
not what was matched. |
|||
.IP REG_NEWLINE |
|||
Compile for newline-sensitive matching. |
|||
By default, newline is a completely ordinary character with no special |
|||
meaning in either REs or strings. |
|||
With this flag, |
|||
`[^' bracket expressions and `.' never match newline, |
|||
a `^' anchor matches the null string after any newline in the string |
|||
in addition to its normal function, |
|||
and the `$' anchor matches the null string before any newline in the |
|||
string in addition to its normal function. |
|||
.IP REG_PEND |
|||
The regular expression ends, |
|||
not at the first NUL, |
|||
but just before the character pointed to by the |
|||
.I re_endp |
|||
member of the structure pointed to by |
|||
.IR preg . |
|||
The |
|||
.I re_endp |
|||
member is of type |
|||
.IR const\ char\ * . |
|||
This flag permits inclusion of NULs in the RE; |
|||
they are considered ordinary characters. |
|||
This is an extension, |
|||
compatible with but not specified by POSIX 1003.2, |
|||
and should be used with |
|||
caution in software intended to be portable to other systems. |
|||
.PP |
|||
When successful, |
|||
.I regcomp |
|||
returns 0 and fills in the structure pointed to by |
|||
.IR preg . |
|||
One member of that structure |
|||
(other than |
|||
.IR re_endp ) |
|||
is publicized: |
|||
.IR re_nsub , |
|||
of type |
|||
.IR size_t , |
|||
contains the number of parenthesized subexpressions within the RE |
|||
(except that the value of this member is undefined if the |
|||
REG_NOSUB flag was used). |
|||
If |
|||
.I regcomp |
|||
fails, it returns a non-zero error code; |
|||
see DIAGNOSTICS. |
|||
.PP |
|||
.I Regexec |
|||
matches the compiled RE pointed to by |
|||
.I preg |
|||
against the |
|||
.IR string , |
|||
subject to the flags in |
|||
.IR eflags , |
|||
and reports results using |
|||
.IR nmatch , |
|||
.IR pmatch , |
|||
and the returned value. |
|||
The RE must have been compiled by a previous invocation of |
|||
.IR regcomp . |
|||
The compiled form is not altered during execution of |
|||
.IR regexec , |
|||
so a single compiled RE can be used simultaneously by multiple threads. |
|||
.PP |
|||
By default, |
|||
the NUL-terminated string pointed to by |
|||
.I string |
|||
is considered to be the text of an entire line, minus any terminating |
|||
newline. |
|||
The |
|||
.I eflags |
|||
argument is the bitwise OR of zero or more of the following flags: |
|||
.IP REG_NOTBOL \w'REG_STARTEND'u+2n |
|||
The first character of |
|||
the string |
|||
is not the beginning of a line, so the `^' anchor should not match before it. |
|||
This does not affect the behavior of newlines under REG_NEWLINE. |
|||
.IP REG_NOTEOL |
|||
The NUL terminating |
|||
the string |
|||
does not end a line, so the `$' anchor should not match before it. |
|||
This does not affect the behavior of newlines under REG_NEWLINE. |
|||
.IP REG_STARTEND |
|||
The string is considered to start at |
|||
\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_so\fR |
|||
and to have a terminating NUL located at |
|||
\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_eo\fR |
|||
(there need not actually be a NUL at that location), |
|||
regardless of the value of |
|||
.IR nmatch . |
|||
See below for the definition of |
|||
.IR pmatch |
|||
and |
|||
.IR nmatch . |
|||
This is an extension, |
|||
compatible with but not specified by POSIX 1003.2, |
|||
and should be used with |
|||
caution in software intended to be portable to other systems. |
|||
Note that a non-zero \fIrm_so\fR does not imply REG_NOTBOL; |
|||
REG_STARTEND affects only the location of the string, |
|||
not how it is matched. |
|||
.PP |
|||
See |
|||
.ZR |
|||
for a discussion of what is matched in situations where an RE or a |
|||
portion thereof could match any of several substrings of |
|||
.IR string . |
|||
.PP |
|||
Normally, |
|||
.I regexec |
|||
returns 0 for success and the non-zero code REG_NOMATCH for failure. |
|||
Other non-zero error codes may be returned in exceptional situations; |
|||
see DIAGNOSTICS. |
|||
.PP |
|||
If REG_NOSUB was specified in the compilation of the RE, |
|||
or if |
|||
.I nmatch |
|||
is 0, |
|||
.I regexec |
|||
ignores the |
|||
.I pmatch |
|||
argument (but see below for the case where REG_STARTEND is specified). |
|||
Otherwise, |
|||
.I pmatch |
|||
points to an array of |
|||
.I nmatch |
|||
structures of type |
|||
.IR regmatch_t . |
|||
Such a structure has at least the members |
|||
.I rm_so |
|||
and |
|||
.IR rm_eo , |
|||
both of type |
|||
.I regoff_t |
|||
(a signed arithmetic type at least as large as an |
|||
.I off_t |
|||
and a |
|||
.IR ssize_t ), |
|||
containing respectively the offset of the first character of a substring |
|||
and the offset of the first character after the end of the substring. |
|||
Offsets are measured from the beginning of the |
|||
.I string |
|||
argument given to |
|||
.IR regexec . |
|||
An empty substring is denoted by equal offsets, |
|||
both indicating the character following the empty substring. |
|||
.PP |
|||
The 0th member of the |
|||
.I pmatch |
|||
array is filled in to indicate what substring of |
|||
.I string |
|||
was matched by the entire RE. |
|||
Remaining members report what substring was matched by parenthesized |
|||
subexpressions within the RE; |
|||
member |
|||
.I i |
|||
reports subexpression |
|||
.IR i , |
|||
with subexpressions counted (starting at 1) by the order of their opening |
|||
parentheses in the RE, left to right. |
|||
Unused entries in the array\(emcorresponding either to subexpressions that |
|||
did not participate in the match at all, or to subexpressions that do not |
|||
exist in the RE (that is, \fIi\fR\ > \fIpreg\fR\->\fIre_nsub\fR)\(emhave both |
|||
.I rm_so |
|||
and |
|||
.I rm_eo |
|||
set to \-1. |
|||
If a subexpression participated in the match several times, |
|||
the reported substring is the last one it matched. |
|||
(Note, as an example in particular, that when the RE `(b*)+' matches `bbb', |
|||
the parenthesized subexpression matches each of the three `b's and then |
|||
an infinite number of empty strings following the last `b', |
|||
so the reported substring is one of the empties.) |
|||
.PP |
|||
If REG_STARTEND is specified, |
|||
.I pmatch |
|||
must point to at least one |
|||
.I regmatch_t |
|||
(even if |
|||
.I nmatch |
|||
is 0 or REG_NOSUB was specified), |
|||
to hold the input offsets for REG_STARTEND. |
|||
Use for output is still entirely controlled by |
|||
.IR nmatch ; |
|||
if |
|||
.I nmatch |
|||
is 0 or REG_NOSUB was specified, |
|||
the value of |
|||
.IR pmatch [0] |
|||
will not be changed by a successful |
|||
.IR regexec . |
|||
.PP |
|||
.I Regerror |
|||
maps a non-zero |
|||
.I errcode |
|||
from either |
|||
.I regcomp |
|||
or |
|||
.I regexec |
|||
to a human-readable, printable message. |
|||
If |
|||
.I preg |
|||
is non-NULL, |
|||
the error code should have arisen from use of |
|||
the |
|||
.I regex_t |
|||
pointed to by |
|||
.IR preg , |
|||
and if the error code came from |
|||
.IR regcomp , |
|||
it should have been the result from the most recent |
|||
.I regcomp |
|||
using that |
|||
.IR regex_t . |
|||
.RI ( Regerror |
|||
may be able to supply a more detailed message using information |
|||
from the |
|||
.IR regex_t .) |
|||
.I Regerror |
|||
places the NUL-terminated message into the buffer pointed to by |
|||
.IR errbuf , |
|||
limiting the length (including the NUL) to at most |
|||
.I errbuf_size |
|||
bytes. |
|||
If the whole message won't fit, |
|||
as much of it as will fit before the terminating NUL is supplied. |
|||
In any case, |
|||
the returned value is the size of buffer needed to hold the whole |
|||
message (including terminating NUL). |
|||
If |
|||
.I errbuf_size |
|||
is 0, |
|||
.I errbuf |
|||
is ignored but the return value is still correct. |
|||
.PP |
|||
If the |
|||
.I errcode |
|||
given to |
|||
.I regerror |
|||
is first ORed with REG_ITOA, |
|||
the ``message'' that results is the printable name of the error code, |
|||
e.g. ``REG_NOMATCH'', |
|||
rather than an explanation thereof. |
|||
If |
|||
.I errcode |
|||
is REG_ATOI, |
|||
then |
|||
.I preg |
|||
shall be non-NULL and the |
|||
.I re_endp |
|||
member of the structure it points to |
|||
must point to the printable name of an error code; |
|||
in this case, the result in |
|||
.I errbuf |
|||
is the decimal digits of |
|||
the numeric value of the error code |
|||
(0 if the name is not recognized). |
|||
REG_ITOA and REG_ATOI are intended primarily as debugging facilities; |
|||
they are extensions, |
|||
compatible with but not specified by POSIX 1003.2, |
|||
and should be used with |
|||
caution in software intended to be portable to other systems. |
|||
Be warned also that they are considered experimental and changes are possible. |
|||
.PP |
|||
.I Regfree |
|||
frees any dynamically-allocated storage associated with the compiled RE |
|||
pointed to by |
|||
.IR preg . |
|||
The remaining |
|||
.I regex_t |
|||
is no longer a valid compiled RE |
|||
and the effect of supplying it to |
|||
.I regexec |
|||
or |
|||
.I regerror |
|||
is undefined. |
|||
.PP |
|||
None of these functions references global variables except for tables |
|||
of constants; |
|||
all are safe for use from multiple threads if the arguments are safe. |
|||
.SH IMPLEMENTATION CHOICES |
|||
There are a number of decisions that 1003.2 leaves up to the implementor, |
|||
either by explicitly saying ``undefined'' or by virtue of them being |
|||
forbidden by the RE grammar. |
|||
This implementation treats them as follows. |
|||
.PP |
|||
See |
|||
.ZR |
|||
for a discussion of the definition of case-independent matching. |
|||
.PP |
|||
There is no particular limit on the length of REs, |
|||
except insofar as memory is limited. |
|||
Memory usage is approximately linear in RE size, and largely insensitive |
|||
to RE complexity, except for bounded repetitions. |
|||
See BUGS for one short RE using them |
|||
that will run almost any system out of memory. |
|||
.PP |
|||
A backslashed character other than one specifically given a magic meaning |
|||
by 1003.2 (such magic meanings occur only in obsolete [``basic''] REs) |
|||
is taken as an ordinary character. |
|||
.PP |
|||
Any unmatched [ is a REG_EBRACK error. |
|||
.PP |
|||
Equivalence classes cannot begin or end bracket-expression ranges. |
|||
The endpoint of one range cannot begin another. |
|||
.PP |
|||
RE_DUP_MAX, the limit on repetition counts in bounded repetitions, is 255. |
|||
.PP |
|||
A repetition operator (?, *, +, or bounds) cannot follow another |
|||
repetition operator. |
|||
A repetition operator cannot begin an expression or subexpression |
|||
or follow `^' or `|'. |
|||
.PP |
|||
`|' cannot appear first or last in a (sub)expression or after another `|', |
|||
i.e. an operand of `|' cannot be an empty subexpression. |
|||
An empty parenthesized subexpression, `()', is legal and matches an |
|||
empty (sub)string. |
|||
An empty string is not a legal RE. |
|||
.PP |
|||
A `{' followed by a digit is considered the beginning of bounds for a |
|||
bounded repetition, which must then follow the syntax for bounds. |
|||
A `{' \fInot\fR followed by a digit is considered an ordinary character. |
|||
.PP |
|||
`^' and `$' beginning and ending subexpressions in obsolete (``basic'') |
|||
REs are anchors, not ordinary characters. |
|||
.SH SEE ALSO |
|||
grep(1), regex(7) |
|||
.PP |
|||
POSIX 1003.2, sections 2.8 (Regular Expression Notation) |
|||
and |
|||
B.5 (C Binding for Regular Expression Matching). |
|||
.SH DIAGNOSTICS |
|||
Non-zero error codes from |
|||
.I regcomp |
|||
and |
|||
.I regexec |
|||
include the following: |
|||
.PP |
|||
.nf |
|||
.ta \w'REG_ECOLLATE'u+3n |
|||
REG_NOMATCH regexec() failed to match |
|||
REG_BADPAT invalid regular expression |
|||
REG_ECOLLATE invalid collating element |
|||
REG_ECTYPE invalid character class |
|||
REG_EESCAPE \e applied to unescapable character |
|||
REG_ESUBREG invalid backreference number |
|||
REG_EBRACK brackets [ ] not balanced |
|||
REG_EPAREN parentheses ( ) not balanced |
|||
REG_EBRACE braces { } not balanced |
|||
REG_BADBR invalid repetition count(s) in { } |
|||
REG_ERANGE invalid character range in [ ] |
|||
REG_ESPACE ran out of memory |
|||
REG_BADRPT ?, *, or + operand invalid |
|||
REG_EMPTY empty (sub)expression |
|||
REG_ASSERT ``can't happen''\(emyou found a bug |
|||
REG_INVARG invalid argument, e.g. negative-length string |
|||
.fi |
|||
.SH HISTORY |
|||
Written by Henry Spencer at University of Toronto, |
|||
henry@zoo.toronto.edu. |
|||
.SH BUGS |
|||
This is an alpha release with known defects. |
|||
Please report problems. |
|||
.PP |
|||
There is one known functionality bug. |
|||
The implementation of internationalization is incomplete: |
|||
the locale is always assumed to be the default one of 1003.2, |
|||
and only the collating elements etc. of that locale are available. |
|||
.PP |
|||
The back-reference code is subtle and doubts linger about its correctness |
|||
in complex cases. |
|||
.PP |
|||
.I Regexec |
|||
performance is poor. |
|||
This will improve with later releases. |
|||
.I Nmatch |
|||
exceeding 0 is expensive; |
|||
.I nmatch |
|||
exceeding 1 is worse. |
|||
.I Regexec |
|||
is largely insensitive to RE complexity \fIexcept\fR that back |
|||
references are massively expensive. |
|||
RE length does matter; in particular, there is a strong speed bonus |
|||
for keeping RE length under about 30 characters, |
|||
with most special characters counting roughly double. |
|||
.PP |
|||
.I Regcomp |
|||
implements bounded repetitions by macro expansion, |
|||
which is costly in time and space if counts are large |
|||
or bounded repetitions are nested. |
|||
An RE like, say, |
|||
`((((a{1,100}){1,100}){1,100}){1,100}){1,100}' |
|||
will (eventually) run almost any existing machine out of swap space. |
|||
.PP |
|||
There are suspected problems with response to obscure error conditions. |
|||
Notably, |
|||
certain kinds of internal overflow, |
|||
produced only by truly enormous REs or by multiply nested bounded repetitions, |
|||
are probably not handled well. |
|||
.PP |
|||
Due to a mistake in 1003.2, things like `a)b' are legal REs because `)' is |
|||
a special character only in the presence of a previous unmatched `('. |
|||
This can't be fixed until the spec is fixed. |
|||
.PP |
|||
The standard's definition of back references is vague. |
|||
For example, does |
|||
`a\e(\e(b\e)*\e2\e)*d' match `abbbd'? |
|||
Until the standard is clarified, |
|||
behavior in such cases should not be relied on. |
|||
.PP |
|||
The implementation of word-boundary matching is a bit of a kludge, |
|||
and bugs may lurk in combinations of word-boundary matching and anchoring. |
|||
@ -1,233 +0,0 @@ |
|||
.TH REGEX 7 "7 Feb 1994" |
|||
.BY "Henry Spencer" |
|||
.SH NAME |
|||
regex \- POSIX 1003.2 regular expressions |
|||
.SH DESCRIPTION |
|||
Regular expressions (``RE''s), |
|||
as defined in POSIX 1003.2, come in two forms: |
|||
modern REs (roughly those of |
|||
.IR egrep ; |
|||
1003.2 calls these ``extended'' REs) |
|||
and obsolete REs (roughly those of |
|||
.IR ed ; |
|||
1003.2 ``basic'' REs). |
|||
Obsolete REs mostly exist for backward compatibility in some old programs; |
|||
they will be discussed at the end. |
|||
1003.2 leaves some aspects of RE syntax and semantics open; |
|||
`\(dg' marks decisions on these aspects that |
|||
may not be fully portable to other 1003.2 implementations. |
|||
.PP |
|||
A (modern) RE is one\(dg or more non-empty\(dg \fIbranches\fR, |
|||
separated by `|'. |
|||
It matches anything that matches one of the branches. |
|||
.PP |
|||
A branch is one\(dg or more \fIpieces\fR, concatenated. |
|||
It matches a match for the first, followed by a match for the second, etc. |
|||
.PP |
|||
A piece is an \fIatom\fR possibly followed |
|||
by a single\(dg `*', `+', `?', or \fIbound\fR. |
|||
An atom followed by `*' matches a sequence of 0 or more matches of the atom. |
|||
An atom followed by `+' matches a sequence of 1 or more matches of the atom. |
|||
An atom followed by `?' matches a sequence of 0 or 1 matches of the atom. |
|||
.PP |
|||
A \fIbound\fR is `{' followed by an unsigned decimal integer, |
|||
possibly followed by `,' |
|||
possibly followed by another unsigned decimal integer, |
|||
always followed by `}'. |
|||
The integers must lie between 0 and RE_DUP_MAX (255\(dg) inclusive, |
|||
and if there are two of them, the first may not exceed the second. |
|||
An atom followed by a bound containing one integer \fIi\fR |
|||
and no comma matches |
|||
a sequence of exactly \fIi\fR matches of the atom. |
|||
An atom followed by a bound |
|||
containing one integer \fIi\fR and a comma matches |
|||
a sequence of \fIi\fR or more matches of the atom. |
|||
An atom followed by a bound |
|||
containing two integers \fIi\fR and \fIj\fR matches |
|||
a sequence of \fIi\fR through \fIj\fR (inclusive) matches of the atom. |
|||
.PP |
|||
An atom is a regular expression enclosed in `()' (matching a match for the |
|||
regular expression), |
|||
an empty set of `()' (matching the null string)\(dg, |
|||
a \fIbracket expression\fR (see below), `.' |
|||
(matching any single character), `^' (matching the null string at the |
|||
beginning of a line), `$' (matching the null string at the |
|||
end of a line), a `\e' followed by one of the characters |
|||
`^.[$()|*+?{\e' |
|||
(matching that character taken as an ordinary character), |
|||
a `\e' followed by any other character\(dg |
|||
(matching that character taken as an ordinary character, |
|||
as if the `\e' had not been present\(dg), |
|||
or a single character with no other significance (matching that character). |
|||
A `{' followed by a character other than a digit is an ordinary |
|||
character, not the beginning of a bound\(dg. |
|||
It is illegal to end an RE with `\e'. |
|||
.PP |
|||
A \fIbracket expression\fR is a list of characters enclosed in `[]'. |
|||
It normally matches any single character from the list (but see below). |
|||
If the list begins with `^', |
|||
it matches any single character |
|||
(but see below) \fInot\fR from the rest of the list. |
|||
If two characters in the list are separated by `\-', this is shorthand |
|||
for the full \fIrange\fR of characters between those two (inclusive) in the |
|||
collating sequence, |
|||
e.g. `[0-9]' in ASCII matches any decimal digit. |
|||
It is illegal\(dg for two ranges to share an |
|||
endpoint, e.g. `a-c-e'. |
|||
Ranges are very collating-sequence-dependent, |
|||
and portable programs should avoid relying on them. |
|||
.PP |
|||
To include a literal `]' in the list, make it the first character |
|||
(following a possible `^'). |
|||
To include a literal `\-', make it the first or last character, |
|||
or the second endpoint of a range. |
|||
To use a literal `\-' as the first endpoint of a range, |
|||
enclose it in `[.' and `.]' to make it a collating element (see below). |
|||
With the exception of these and some combinations using `[' (see next |
|||
paragraphs), all other special characters, including `\e', lose their |
|||
special significance within a bracket expression. |
|||
.PP |
|||
Within a bracket expression, a collating element (a character, |
|||
a multi-character sequence that collates as if it were a single character, |
|||
or a collating-sequence name for either) |
|||
enclosed in `[.' and `.]' stands for the |
|||
sequence of characters of that collating element. |
|||
The sequence is a single element of the bracket expression's list. |
|||
A bracket expression containing a multi-character collating element |
|||
can thus match more than one character, |
|||
e.g. if the collating sequence includes a `ch' collating element, |
|||
then the RE `[[.ch.]]*c' matches the first five characters |
|||
of `chchcc'. |
|||
.PP |
|||
Within a bracket expression, a collating element enclosed in `[=' and |
|||
`=]' is an equivalence class, standing for the sequences of characters |
|||
of all collating elements equivalent to that one, including itself. |
|||
(If there are no other equivalent collating elements, |
|||
the treatment is as if the enclosing delimiters were `[.' and `.]'.) |
|||
For example, if o and \o'o^' are the members of an equivalence class, |
|||
then `[[=o=]]', `[[=\o'o^'=]]', and `[o\o'o^']' are all synonymous. |
|||
An equivalence class may not\(dg be an endpoint |
|||
of a range. |
|||
.PP |
|||
Within a bracket expression, the name of a \fIcharacter class\fR enclosed |
|||
in `[:' and `:]' stands for the list of all characters belonging to that |
|||
class. |
|||
Standard character class names are: |
|||
.PP |
|||
.RS |
|||
.nf |
|||
.ta 3c 6c 9c |
|||
alnum digit punct |
|||
alpha graph space |
|||
blank lower upper |
|||
cntrl print xdigit |
|||
.fi |
|||
.RE |
|||
.PP |
|||
These stand for the character classes defined in |
|||
.IR ctype (3). |
|||
A locale may provide others. |
|||
A character class may not be used as an endpoint of a range. |
|||
.PP |
|||
There are two special cases\(dg of bracket expressions: |
|||
the bracket expressions `[[:<:]]' and `[[:>:]]' match the null string at |
|||
the beginning and end of a word respectively. |
|||
A word is defined as a sequence of |
|||
word characters |
|||
which is neither preceded nor followed by |
|||
word characters. |
|||
A word character is an |
|||
.I alnum |
|||
character (as defined by |
|||
.IR ctype (3)) |
|||
or an underscore. |
|||
This is an extension, |
|||
compatible with but not specified by POSIX 1003.2, |
|||
and should be used with |
|||
caution in software intended to be portable to other systems. |
|||
.PP |
|||
In the event that an RE could match more than one substring of a given |
|||
string, |
|||
the RE matches the one starting earliest in the string. |
|||
If the RE could match more than one substring starting at that point, |
|||
it matches the longest. |
|||
Subexpressions also match the longest possible substrings, subject to |
|||
the constraint that the whole match be as long as possible, |
|||
with subexpressions starting earlier in the RE taking priority over |
|||
ones starting later. |
|||
Note that higher-level subexpressions thus take priority over |
|||
their lower-level component subexpressions. |
|||
.PP |
|||
Match lengths are measured in characters, not collating elements. |
|||
A null string is considered longer than no match at all. |
|||
For example, |
|||
`bb*' matches the three middle characters of `abbbc', |
|||
`(wee|week)(knights|nights)' matches all ten characters of `weeknights', |
|||
when `(.*).*' is matched against `abc' the parenthesized subexpression |
|||
matches all three characters, and |
|||
when `(a*)*' is matched against `bc' both the whole RE and the parenthesized |
|||
subexpression match the null string. |
|||
.PP |
|||
If case-independent matching is specified, |
|||
the effect is much as if all case distinctions had vanished from the |
|||
alphabet. |
|||
When an alphabetic that exists in multiple cases appears as an |
|||
ordinary character outside a bracket expression, it is effectively |
|||
transformed into a bracket expression containing both cases, |
|||
e.g. `x' becomes `[xX]'. |
|||
When it appears inside a bracket expression, all case counterparts |
|||
of it are added to the bracket expression, so that (e.g.) `[x]' |
|||
becomes `[xX]' and `[^x]' becomes `[^xX]'. |
|||
.PP |
|||
No particular limit is imposed on the length of REs\(dg. |
|||
Programs intended to be portable should not employ REs longer |
|||
than 256 bytes, |
|||
as an implementation can refuse to accept such REs and remain |
|||
POSIX-compliant. |
|||
.PP |
|||
Obsolete (``basic'') regular expressions differ in several respects. |
|||
`|', `+', and `?' are ordinary characters and there is no equivalent |
|||
for their functionality. |
|||
The delimiters for bounds are `\e{' and `\e}', |
|||
with `{' and `}' by themselves ordinary characters. |
|||
The parentheses for nested subexpressions are `\e(' and `\e)', |
|||
with `(' and `)' by themselves ordinary characters. |
|||
`^' is an ordinary character except at the beginning of the |
|||
RE or\(dg the beginning of a parenthesized subexpression, |
|||
`$' is an ordinary character except at the end of the |
|||
RE or\(dg the end of a parenthesized subexpression, |
|||
and `*' is an ordinary character if it appears at the beginning of the |
|||
RE or the beginning of a parenthesized subexpression |
|||
(after a possible leading `^'). |
|||
Finally, there is one new type of atom, a \fIback reference\fR: |
|||
`\e' followed by a non-zero decimal digit \fId\fR |
|||
matches the same sequence of characters |
|||
matched by the \fId\fRth parenthesized subexpression |
|||
(numbering subexpressions by the positions of their opening parentheses, |
|||
left to right), |
|||
so that (e.g.) `\e([bc]\e)\e1' matches `bb' or `cc' but not `bc'. |
|||
.SH SEE ALSO |
|||
regex(3) |
|||
.PP |
|||
POSIX 1003.2, section 2.8 (Regular Expression Notation). |
|||
.SH BUGS |
|||
Having two kinds of REs is a botch. |
|||
.PP |
|||
The current 1003.2 spec says that `)' is an ordinary character in |
|||
the absence of an unmatched `('; |
|||
this was an unintentional result of a wording error, |
|||
and change is likely. |
|||
Avoid relying on it. |
|||
.PP |
|||
Back references are a dreadful botch, |
|||
posing major problems for efficient implementations. |
|||
They are also somewhat vaguely defined |
|||
(does |
|||
`a\e(\e(b\e)*\e2\e)*d' match `abbbd'?). |
|||
Avoid using them. |
|||
.PP |
|||
1003.2's specification of case-independent matching is vague. |
|||
The ``one case implies all cases'' definition given above |
|||
is current consensus among implementors as to the right interpretation. |
|||
.PP |
|||
The syntax for word boundaries is incredibly ugly. |
|||
@ -1,106 +0,0 @@ |
|||
# Microsoft Developer Studio Project File - Name="regex" - Package Owner=<4> |
|||
# Microsoft Developer Studio Generated Build File, Format Version 5.00 |
|||
# ** DO NOT EDIT ** |
|||
|
|||
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 |
|||
|
|||
CFG=regex - Win32 Debug |
|||
!MESSAGE This is not a valid makefile. To build this project using NMAKE, |
|||
!MESSAGE use the Export Makefile command and run |
|||
!MESSAGE |
|||
!MESSAGE NMAKE /f "regex.mak". |
|||
!MESSAGE |
|||
!MESSAGE You can specify a configuration when running NMAKE |
|||
!MESSAGE by defining the macro CFG on the command line. For example: |
|||
!MESSAGE |
|||
!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Debug" |
|||
!MESSAGE |
|||
!MESSAGE Possible choices for configuration are: |
|||
!MESSAGE |
|||
!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") |
|||
!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") |
|||
!MESSAGE |
|||
|
|||
# Begin Project |
|||
# PROP Scc_ProjName "" |
|||
# PROP Scc_LocalPath "" |
|||
CPP=cl.exe |
|||
MTL=midl.exe |
|||
RSC=rc.exe |
|||
|
|||
!IF "$(CFG)" == "regex - Win32 Release" |
|||
|
|||
# PROP BASE Use_MFC 0 |
|||
# PROP BASE Use_Debug_Libraries 0 |
|||
# PROP BASE Output_Dir "Release" |
|||
# PROP BASE Intermediate_Dir "Release" |
|||
# PROP BASE Target_Dir "" |
|||
# PROP Use_MFC 0 |
|||
# PROP Use_Debug_Libraries 0 |
|||
# PROP Output_Dir "Release" |
|||
# PROP Intermediate_Dir "Release" |
|||
# PROP Ignore_Export_Lib 0 |
|||
# PROP Target_Dir "" |
|||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c |
|||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c |
|||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 |
|||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 |
|||
# ADD BASE RSC /l 0x409 /d "NDEBUG" |
|||
# ADD RSC /l 0x409 /d "NDEBUG" |
|||
BSC32=bscmake.exe |
|||
# ADD BASE BSC32 /nologo |
|||
# ADD BSC32 /nologo |
|||
LINK32=link.exe |
|||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 |
|||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 |
|||
|
|||
!ELSEIF "$(CFG)" == "regex - Win32 Debug" |
|||
|
|||
# PROP BASE Use_MFC 0 |
|||
# PROP BASE Use_Debug_Libraries 1 |
|||
# PROP BASE Output_Dir "Debug" |
|||
# PROP BASE Intermediate_Dir "Debug" |
|||
# PROP BASE Target_Dir "" |
|||
# PROP Use_MFC 0 |
|||
# PROP Use_Debug_Libraries 1 |
|||
# PROP Output_Dir "Debug" |
|||
# PROP Intermediate_Dir "Debug" |
|||
# PROP Ignore_Export_Lib 0 |
|||
# PROP Target_Dir "" |
|||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c |
|||
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c |
|||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 |
|||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 |
|||
# ADD BASE RSC /l 0x409 /d "_DEBUG" |
|||
# ADD RSC /l 0x409 /d "_DEBUG" |
|||
BSC32=bscmake.exe |
|||
# ADD BASE BSC32 /nologo |
|||
# ADD BSC32 /nologo |
|||
LINK32=link.exe |
|||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept |
|||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept |
|||
|
|||
!ENDIF |
|||
|
|||
# Begin Target |
|||
|
|||
# Name "regex - Win32 Release" |
|||
# Name "regex - Win32 Debug" |
|||
# Begin Source File |
|||
|
|||
SOURCE=.\regcomp.c |
|||
# End Source File |
|||
# Begin Source File |
|||
|
|||
SOURCE=.\regerror.c |
|||
# End Source File |
|||
# Begin Source File |
|||
|
|||
SOURCE=.\regexec.c |
|||
# End Source File |
|||
# Begin Source File |
|||
|
|||
SOURCE=.\regfree.c |
|||
# End Source File |
|||
# End Target |
|||
# End Project |
|||
@ -1,29 +0,0 @@ |
|||
Microsoft Developer Studio Workspace File, Format Version 5.00 |
|||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! |
|||
|
|||
############################################################################### |
|||
|
|||
Project: "regex"=.\regex.dsp - Package Owner=<4> |
|||
|
|||
Package=<5> |
|||
{{{ |
|||
}}} |
|||
|
|||
Package=<4> |
|||
{{{ |
|||
}}} |
|||
|
|||
############################################################################### |
|||
|
|||
Global: |
|||
|
|||
Package=<5> |
|||
{{{ |
|||
}}} |
|||
|
|||
Package=<3> |
|||
{{{ |
|||
}}} |
|||
|
|||
############################################################################### |
|||
|
|||
@ -1,85 +0,0 @@ |
|||
#ifndef _HSREGEX_H_ |
|||
#define _HSREGEX_H_ |
|||
#ifndef _HSREGEX_H |
|||
#define _HSREGEX_H /* never again */ |
|||
/* ========= begin header generated by ././mkh ========= */ |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/* === regex2.h === */ |
|||
#ifdef WIN32 |
|||
#define API_EXPORT(type) __declspec(dllexport) type __stdcall |
|||
#elif defined(__GNUC__) && __GNUC__ >= 4 |
|||
#define API_EXPORT(type) __attribute__ ((visibility("default"))) type |
|||
#else |
|||
#define API_EXPORT(type) type |
|||
#endif |
|||
|
|||
typedef off_t regoff_t; |
|||
typedef struct { |
|||
int re_magic; |
|||
size_t re_nsub; /* number of parenthesized subexpressions */ |
|||
const char *re_endp; /* end pointer for REG_PEND */ |
|||
struct re_guts *re_g; /* none of your business :-) */ |
|||
} regex_t; |
|||
typedef struct { |
|||
regoff_t rm_so; /* start of match */ |
|||
regoff_t rm_eo; /* end of match */ |
|||
} regmatch_t; |
|||
|
|||
|
|||
/* === regcomp.c === */ |
|||
API_EXPORT(int) regcomp(regex_t *, const char *, int); |
|||
#define REG_BASIC 0000 |
|||
#define REG_EXTENDED 0001 |
|||
#define REG_ICASE 0002 |
|||
#define REG_NOSUB 0004 |
|||
#define REG_NEWLINE 0010 |
|||
#define REG_NOSPEC 0020 |
|||
#define REG_PEND 0040 |
|||
#define REG_DUMP 0200 |
|||
|
|||
|
|||
/* === regerror.c === */ |
|||
#define REG_OKAY 0 |
|||
#define REG_NOMATCH 1 |
|||
#define REG_BADPAT 2 |
|||
#define REG_ECOLLATE 3 |
|||
#define REG_ECTYPE 4 |
|||
#define REG_EESCAPE 5 |
|||
#define REG_ESUBREG 6 |
|||
#define REG_EBRACK 7 |
|||
#define REG_EPAREN 8 |
|||
#define REG_EBRACE 9 |
|||
#define REG_BADBR 10 |
|||
#define REG_ERANGE 11 |
|||
#define REG_ESPACE 12 |
|||
#define REG_BADRPT 13 |
|||
#define REG_EMPTY 14 |
|||
#define REG_ASSERT 15 |
|||
#define REG_INVARG 16 |
|||
#define REG_ATOI 255 /* convert name to number (!) */ |
|||
#define REG_ITOA 0400 /* convert number to name (!) */ |
|||
API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t); |
|||
|
|||
|
|||
/* === regexec.c === */ |
|||
API_EXPORT(int) regexec(const regex_t *, const char *, size_t, regmatch_t [], int); |
|||
#define REG_NOTBOL 00001 |
|||
#define REG_NOTEOL 00002 |
|||
#define REG_STARTEND 00004 |
|||
#define REG_TRACE 00400 /* tracing of execution */ |
|||
#define REG_LARGE 01000 /* force large representation */ |
|||
#define REG_BACKR 02000 /* force use of backref code */ |
|||
|
|||
|
|||
/* === regfree.c === */ |
|||
API_EXPORT(void) regfree(regex_t *); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
/* ========= end header generated by ././mkh ========= */ |
|||
#endif |
|||
#endif |
|||
@ -1,304 +0,0 @@ |
|||
# Microsoft Developer Studio Generated NMAKE File, Based on regex.dsp
|
|||
!IF "$(CFG)" == "" |
|||
CFG=regex - Win32 Release |
|||
!MESSAGE No configuration specified. Defaulting to regex - Win32 Release. |
|||
!ENDIF |
|||
|
|||
!IF "$(CFG)" != "regex - Win32 Release" && "$(CFG)" != "regex - Win32 Debug" |
|||
!MESSAGE Invalid configuration "$(CFG)" specified. |
|||
!MESSAGE You can specify a configuration when running NMAKE |
|||
!MESSAGE by defining the macro CFG on the command line. For example: |
|||
!MESSAGE |
|||
!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Release" |
|||
!MESSAGE |
|||
!MESSAGE Possible choices for configuration are: |
|||
!MESSAGE |
|||
!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Static Library") |
|||
!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Static Library") |
|||
!MESSAGE |
|||
!ERROR An invalid configuration is specified. |
|||
!ENDIF |
|||
|
|||
!IF "$(OS)" == "Windows_NT" |
|||
NULL= |
|||
!ELSE |
|||
NULL=nul |
|||
!ENDIF |
|||
|
|||
CPP=cl.exe |
|||
|
|||
!IF "$(CFG)" == "regex - Win32 Release" |
|||
|
|||
OUTDIR=.\Release |
|||
INTDIR=.\Release |
|||
# Begin Custom Macros
|
|||
OutDir=.\.\Release |
|||
# End Custom Macros
|
|||
|
|||
!IF "$(RECURSE)" == "0" |
|||
|
|||
ALL : "$(OUTDIR)\regex.lib" |
|||
|
|||
!ELSE |
|||
|
|||
ALL : "$(OUTDIR)\regex.lib" |
|||
|
|||
!ENDIF |
|||
|
|||
CLEAN : |
|||
-@erase "$(INTDIR)\regcomp.obj" |
|||
-@erase "$(INTDIR)\regerror.obj" |
|||
-@erase "$(INTDIR)\regexec.obj" |
|||
-@erase "$(INTDIR)\regfree.obj" |
|||
-@erase "$(INTDIR)\vc50.idb" |
|||
-@erase "$(OUTDIR)\regex.lib" |
|||
|
|||
"$(OUTDIR)" : |
|||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" |
|||
|
|||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\
|
|||
/Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c |
|||
CPP_OBJS=.\Release/ |
|||
CPP_SBRS=. |
|||
BSC32=bscmake.exe |
|||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc" |
|||
BSC32_SBRS= \
|
|||
|
|||
LIB32=link.exe -lib |
|||
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib" |
|||
LIB32_OBJS= \
|
|||
"$(INTDIR)\regcomp.obj" \
|
|||
"$(INTDIR)\regerror.obj" \
|
|||
"$(INTDIR)\regexec.obj" \
|
|||
"$(INTDIR)\regfree.obj" |
|||
|
|||
"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) |
|||
$(LIB32) @<< |
|||
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) |
|||
<< |
|||
|
|||
!ELSEIF "$(CFG)" == "regex - Win32 Debug" |
|||
|
|||
OUTDIR=.\Debug |
|||
INTDIR=.\Debug |
|||
# Begin Custom Macros
|
|||
OutDir=.\.\Debug |
|||
# End Custom Macros
|
|||
|
|||
!IF "$(RECURSE)" == "0" |
|||
|
|||
ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc" |
|||
|
|||
!ELSE |
|||
|
|||
ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc" |
|||
|
|||
!ENDIF |
|||
|
|||
CLEAN : |
|||
-@erase "$(INTDIR)\regcomp.obj" |
|||
-@erase "$(INTDIR)\regcomp.sbr" |
|||
-@erase "$(INTDIR)\regerror.obj" |
|||
-@erase "$(INTDIR)\regerror.sbr" |
|||
-@erase "$(INTDIR)\regexec.obj" |
|||
-@erase "$(INTDIR)\regexec.sbr" |
|||
-@erase "$(INTDIR)\regfree.obj" |
|||
-@erase "$(INTDIR)\regfree.sbr" |
|||
-@erase "$(INTDIR)\vc50.idb" |
|||
-@erase "$(OUTDIR)\regex.bsc" |
|||
-@erase "$(OUTDIR)\regex.lib" |
|||
|
|||
"$(OUTDIR)" : |
|||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" |
|||
|
|||
CPP_PROJ=/nologo /MDd /W3 /GX /Z7 /Od /I "." /D "WIN32" /D "_DEBUG" /D\
|
|||
"_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\"\
|
|||
/Fd"$(INTDIR)\\" /FD /c |
|||
CPP_OBJS=.\Debug/ |
|||
CPP_SBRS=.\Debug/ |
|||
BSC32=bscmake.exe |
|||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc" |
|||
BSC32_SBRS= \
|
|||
"$(INTDIR)\regcomp.sbr" \
|
|||
"$(INTDIR)\regerror.sbr" \
|
|||
"$(INTDIR)\regexec.sbr" \
|
|||
"$(INTDIR)\regfree.sbr" |
|||
|
|||
"$(OUTDIR)\regex.bsc" : "$(OUTDIR)" $(BSC32_SBRS) |
|||
$(BSC32) @<< |
|||
$(BSC32_FLAGS) $(BSC32_SBRS) |
|||
<< |
|||
|
|||
LIB32=link.exe -lib |
|||
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib" |
|||
LIB32_OBJS= \
|
|||
"$(INTDIR)\regcomp.obj" \
|
|||
"$(INTDIR)\regerror.obj" \
|
|||
"$(INTDIR)\regexec.obj" \
|
|||
"$(INTDIR)\regfree.obj" |
|||
|
|||
"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) |
|||
$(LIB32) @<< |
|||
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) |
|||
<< |
|||
|
|||
!ENDIF |
|||
|
|||
.c{$(CPP_OBJS)}.obj:: |
|||
$(CPP) @<< |
|||
$(CPP_PROJ) $< |
|||
<< |
|||
|
|||
.cpp{$(CPP_OBJS)}.obj:: |
|||
$(CPP) @<< |
|||
$(CPP_PROJ) $< |
|||
<< |
|||
|
|||
.cxx{$(CPP_OBJS)}.obj:: |
|||
$(CPP) @<< |
|||
$(CPP_PROJ) $< |
|||
<< |
|||
|
|||
.c{$(CPP_SBRS)}.sbr:: |
|||
$(CPP) @<< |
|||
$(CPP_PROJ) $< |
|||
<< |
|||
|
|||
.cpp{$(CPP_SBRS)}.sbr:: |
|||
$(CPP) @<< |
|||
$(CPP_PROJ) $< |
|||
<< |
|||
|
|||
.cxx{$(CPP_SBRS)}.sbr:: |
|||
$(CPP) @<< |
|||
$(CPP_PROJ) $< |
|||
<< |
|||
|
|||
|
|||
!IF "$(CFG)" == "regex - Win32 Release" || "$(CFG)" == "regex - Win32 Debug" |
|||
SOURCE=.\regcomp.c |
|||
|
|||
!IF "$(CFG)" == "regex - Win32 Release" |
|||
|
|||
DEP_CPP_REGCO=\
|
|||
".\cclass.h"\
|
|||
".\cname.h"\
|
|||
".\regcomp.ih"\
|
|||
".\regex.h"\
|
|||
".\regex2.h"\
|
|||
".\utils.h"\
|
|||
|
|||
|
|||
"$(INTDIR)\regcomp.obj" : $(SOURCE) $(DEP_CPP_REGCO) "$(INTDIR)" |
|||
|
|||
|
|||
!ELSEIF "$(CFG)" == "regex - Win32 Debug" |
|||
|
|||
DEP_CPP_REGCO=\
|
|||
".\cclass.h"\
|
|||
".\cname.h"\
|
|||
".\regcomp.ih"\
|
|||
".\regex.h"\
|
|||
".\regex2.h"\
|
|||
".\utils.h"\
|
|||
{$(INCLUDE)}"sys\types.h"\
|
|||
|
|||
|
|||
"$(INTDIR)\regcomp.obj" "$(INTDIR)\regcomp.sbr" : $(SOURCE) $(DEP_CPP_REGCO)\ |
|||
"$(INTDIR)" |
|||
|
|||
|
|||
!ENDIF |
|||
|
|||
SOURCE=.\regerror.c |
|||
|
|||
!IF "$(CFG)" == "regex - Win32 Release" |
|||
|
|||
DEP_CPP_REGER=\
|
|||
".\regerror.ih"\
|
|||
".\regex.h"\
|
|||
".\utils.h"\
|
|||
|
|||
|
|||
"$(INTDIR)\regerror.obj" : $(SOURCE) $(DEP_CPP_REGER) "$(INTDIR)" |
|||
|
|||
|
|||
!ELSEIF "$(CFG)" == "regex - Win32 Debug" |
|||
|
|||
DEP_CPP_REGER=\
|
|||
".\regerror.ih"\
|
|||
".\regex.h"\
|
|||
".\utils.h"\
|
|||
{$(INCLUDE)}"sys\types.h"\
|
|||
|
|||
|
|||
"$(INTDIR)\regerror.obj" "$(INTDIR)\regerror.sbr" : $(SOURCE) $(DEP_CPP_REGER)\ |
|||
"$(INTDIR)" |
|||
|
|||
|
|||
!ENDIF |
|||
|
|||
SOURCE=.\regexec.c |
|||
|
|||
!IF "$(CFG)" == "regex - Win32 Release" |
|||
|
|||
DEP_CPP_REGEX=\
|
|||
".\engine.c"\
|
|||
".\engine.ih"\
|
|||
".\regex.h"\
|
|||
".\regex2.h"\
|
|||
".\utils.h"\
|
|||
|
|||
|
|||
"$(INTDIR)\regexec.obj" : $(SOURCE) $(DEP_CPP_REGEX) "$(INTDIR)" |
|||
|
|||
|
|||
!ELSEIF "$(CFG)" == "regex - Win32 Debug" |
|||
|
|||
DEP_CPP_REGEX=\
|
|||
".\engine.c"\
|
|||
".\engine.ih"\
|
|||
".\regex.h"\
|
|||
".\regex2.h"\
|
|||
".\utils.h"\
|
|||
{$(INCLUDE)}"sys\types.h"\
|
|||
|
|||
|
|||
"$(INTDIR)\regexec.obj" "$(INTDIR)\regexec.sbr" : $(SOURCE) $(DEP_CPP_REGEX)\ |
|||
"$(INTDIR)" |
|||
|
|||
|
|||
!ENDIF |
|||
|
|||
SOURCE=.\regfree.c |
|||
|
|||
!IF "$(CFG)" == "regex - Win32 Release" |
|||
|
|||
DEP_CPP_REGFR=\
|
|||
".\regex.h"\
|
|||
".\regex2.h"\
|
|||
".\utils.h"\
|
|||
|
|||
|
|||
"$(INTDIR)\regfree.obj" : $(SOURCE) $(DEP_CPP_REGFR) "$(INTDIR)" |
|||
|
|||
|
|||
!ELSEIF "$(CFG)" == "regex - Win32 Debug" |
|||
|
|||
DEP_CPP_REGFR=\
|
|||
".\regex.h"\
|
|||
".\regex2.h"\
|
|||
".\utils.h"\
|
|||
{$(INCLUDE)}"sys\types.h"\
|
|||
|
|||
|
|||
"$(INTDIR)\regfree.obj" "$(INTDIR)\regfree.sbr" : $(SOURCE) $(DEP_CPP_REGFR)\ |
|||
"$(INTDIR)" |
|||
|
|||
|
|||
!ENDIF |
|||
|
|||
SOURCE=.\engine.c |
|||
|
|||
!ENDIF |
|||
|
|||
@ -1,140 +0,0 @@ |
|||
/* |
|||
* First, the stuff that ends up in the outside-world include file |
|||
= #ifdef WIN32 |
|||
= #define API_EXPORT(type) __declspec(dllexport) type __stdcall |
|||
= #else |
|||
= #define API_EXPORT(type) type |
|||
= #endif |
|||
= |
|||
= typedef off_t regoff_t; |
|||
= typedef struct { |
|||
= int re_magic; |
|||
= size_t re_nsub; // number of parenthesized subexpressions |
|||
= const unsigned char *re_endp; // end pointer for REG_PEND |
|||
= struct re_guts *re_g; // none of your business :-) |
|||
= } regex_t; |
|||
= typedef struct { |
|||
= regoff_t rm_so; // start of match |
|||
= regoff_t rm_eo; // end of match |
|||
= } regmatch_t; |
|||
*/ |
|||
/* |
|||
* internals of regex_t |
|||
*/ |
|||
#define MAGIC1 ((('r'^0200)<<8) | 'e') |
|||
|
|||
/* |
|||
* The internal representation is a *strip*, a sequence of |
|||
* operators ending with an endmarker. (Some terminology etc. is a |
|||
* historical relic of earlier versions which used multiple strips.) |
|||
* Certain oddities in the representation are there to permit running |
|||
* the machinery backwards; in particular, any deviation from sequential |
|||
* flow must be marked at both its source and its destination. Some |
|||
* fine points: |
|||
* |
|||
* - OPLUS_ and O_PLUS are *inside* the loop they create. |
|||
* - OQUEST_ and O_QUEST are *outside* the bypass they create. |
|||
* - OCH_ and O_CH are *outside* the multi-way branch they create, while |
|||
* OOR1 and OOR2 are respectively the end and the beginning of one of |
|||
* the branches. Note that there is an implicit OOR2 following OCH_ |
|||
* and an implicit OOR1 preceding O_CH. |
|||
* |
|||
* In state representations, an operator's bit is on to signify a state |
|||
* immediately *preceding* "execution" of that operator. |
|||
*/ |
|||
typedef long sop; /* strip operator */ |
|||
typedef long sopno; |
|||
#define OPRMASK 0x7c000000 |
|||
#define OPDMASK 0x03ffffff |
|||
#define OPSHIFT (26) |
|||
#define OP(n) ((n)&OPRMASK) |
|||
#define OPND(n) ((n)&OPDMASK) |
|||
#define SOP(op, opnd) ((op)|(opnd)) |
|||
/* operators meaning operand */ |
|||
/* (back, fwd are offsets) */ |
|||
#define OEND (1<<OPSHIFT) /* endmarker - */ |
|||
#define OCHAR (2<<OPSHIFT) /* character unsigned char */ |
|||
#define OBOL (3<<OPSHIFT) /* left anchor - */ |
|||
#define OEOL (4<<OPSHIFT) /* right anchor - */ |
|||
#define OANY (5<<OPSHIFT) /* . - */ |
|||
#define OANYOF (6<<OPSHIFT) /* [...] set number */ |
|||
#define OBACK_ (7<<OPSHIFT) /* begin \d paren number */ |
|||
#define O_BACK (8<<OPSHIFT) /* end \d paren number */ |
|||
#define OPLUS_ (9<<OPSHIFT) /* + prefix fwd to suffix */ |
|||
#define O_PLUS (10<<OPSHIFT) /* + suffix back to prefix */ |
|||
#define OQUEST_ (11<<OPSHIFT) /* ? prefix fwd to suffix */ |
|||
#define O_QUEST (12<<OPSHIFT) /* ? suffix back to prefix */ |
|||
#define OLPAREN (13<<OPSHIFT) /* ( fwd to ) */ |
|||
#define ORPAREN (14<<OPSHIFT) /* ) back to ( */ |
|||
#define OCH_ (15<<OPSHIFT) /* begin choice fwd to OOR2 */ |
|||
#define OOR1 (16<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */ |
|||
#define OOR2 (17<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */ |
|||
#define O_CH (18<<OPSHIFT) /* end choice back to OOR1 */ |
|||
#define OBOW (19<<OPSHIFT) /* begin word - */ |
|||
#define OEOW (20<<OPSHIFT) /* end word - */ |
|||
|
|||
/* |
|||
* Structure for [] character-set representation. Character sets are |
|||
* done as bit vectors, grouped 8 to a byte vector for compactness. |
|||
* The individual set therefore has both a pointer to the byte vector |
|||
* and a mask to pick out the relevant bit of each byte. A hash code |
|||
* simplifies testing whether two sets could be identical. |
|||
* |
|||
* This will get trickier for multicharacter collating elements. As |
|||
* preliminary hooks for dealing with such things, we also carry along |
|||
* a string of multi-character elements, and decide the size of the |
|||
* vectors at run time. |
|||
*/ |
|||
typedef struct { |
|||
uch *ptr; /* -> uch [csetsize] */ |
|||
uch mask; /* bit within array */ |
|||
uch hash; /* hash code */ |
|||
size_t smultis; |
|||
unsigned char *multis; /* -> char[smulti] ab\0cd\0ef\0\0 */ |
|||
} cset; |
|||
/* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */ |
|||
#define CHadd(cs, c) ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c)) |
|||
#define CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c)) |
|||
#define CHIN(cs, c) ((cs)->ptr[(uch)(c)] & (cs)->mask) |
|||
#define MCadd(p, cs, cp) mcadd(p, cs, cp) /* regcomp() internal fns */ |
|||
#define MCsub(p, cs, cp) mcsub(p, cs, cp) |
|||
#define MCin(p, cs, cp) mcin(p, cs, cp) |
|||
|
|||
/* stuff for character categories */ |
|||
typedef unsigned char cat_t; |
|||
|
|||
/* |
|||
* main compiled-expression structure |
|||
*/ |
|||
struct re_guts { |
|||
int magic; |
|||
# define MAGIC2 ((('R'^0200)<<8)|'E') |
|||
sop *strip; /* malloced area for strip */ |
|||
int csetsize; /* number of bits in a cset vector */ |
|||
int ncsets; /* number of csets in use */ |
|||
cset *sets; /* -> cset [ncsets] */ |
|||
uch *setbits; /* -> uch[csetsize][ncsets/CHAR_BIT] */ |
|||
int cflags; /* copy of regcomp() cflags argument */ |
|||
sopno nstates; /* = number of sops */ |
|||
sopno firststate; /* the initial OEND (normally 0) */ |
|||
sopno laststate; /* the final OEND */ |
|||
int iflags; /* internal flags */ |
|||
# define USEBOL 01 /* used ^ */ |
|||
# define USEEOL 02 /* used $ */ |
|||
# define BAD 04 /* something wrong */ |
|||
int nbol; /* number of ^ used */ |
|||
int neol; /* number of $ used */ |
|||
int ncategories; /* how many character categories */ |
|||
cat_t *categories; /* ->catspace[-UCHAR_MIN] */ |
|||
unsigned char *must; /* match must contain this string */ |
|||
int mlen; /* length of must */ |
|||
size_t nsub; /* copy of re_nsub */ |
|||
int backrefs; /* does it use back references? */ |
|||
sopno nplus; /* how deep does it nest +s? */ |
|||
/* catspace must be last */ |
|||
cat_t catspace[1]; /* actually [NC] */ |
|||
}; |
|||
|
|||
/* misc utilities */ |
|||
#define OUT (UCHAR_MAX+1) /* a non-character value */ |
|||
#define ISWORD(c) (isalnum(c) || (c) == '_') |
|||
@ -1,138 +0,0 @@ |
|||
/* |
|||
* the outer shell of regexec() |
|||
* |
|||
* This file includes engine.c *twice*, after muchos fiddling with the |
|||
* macros that code uses. This lets the same code operate on two different |
|||
* representations for state sets. |
|||
*/ |
|||
#include <sys/types.h> |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
#include <limits.h> |
|||
#include <ctype.h> |
|||
|
|||
#include "regex.h" |
|||
#include "utils.h" |
|||
#include "regex2.h" |
|||
|
|||
#define PHP_REGEX_NOPE 0; /* for use in asserts; shuts lint up */ |
|||
|
|||
/* macros for manipulating states, small version */ |
|||
#define states unsigned |
|||
#define states1 unsigned /* for later use in regexec() decision */ |
|||
#define CLEAR(v) ((v) = 0) |
|||
#define SET0(v, n) ((v) &= ~((unsigned)1 << (n))) |
|||
#define SET1(v, n) ((v) |= (unsigned)1 << (n)) |
|||
#define ISSET(v, n) ((v) & ((unsigned)1 << (n))) |
|||
#define ASSIGN(d, s) ((d) = (s)) |
|||
#define EQ(a, b) ((a) == (b)) |
|||
#define STATEVARS int dummy /* dummy version */ |
|||
#define STATESETUP(m, n) /* nothing */ |
|||
#define STATETEARDOWN(m) /* nothing */ |
|||
#define SETUP(v) ((v) = 0) |
|||
#define onestate unsigned |
|||
#define INIT(o, n) ((o) = (unsigned)1 << (n)) |
|||
#define INC(o) ((o) <<= 1) |
|||
#define ISSTATEIN(v, o) ((v) & (o)) |
|||
/* some abbreviations; note that some of these know variable names! */ |
|||
/* do "if I'm here, I can also be there" etc without branches */ |
|||
#define FWD(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) << (n)) |
|||
#define BACK(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) >> (n)) |
|||
#define ISSETBACK(v, n) ((v) & ((unsigned)here >> (n))) |
|||
/* function names */ |
|||
#define SNAMES /* engine.c looks after details */ |
|||
|
|||
#include "engine.c" |
|||
|
|||
/* now undo things */ |
|||
#undef states |
|||
#undef CLEAR |
|||
#undef SET0 |
|||
#undef SET1 |
|||
#undef ISSET |
|||
#undef ASSIGN |
|||
#undef EQ |
|||
#undef STATEVARS |
|||
#undef STATESETUP |
|||
#undef STATETEARDOWN |
|||
#undef SETUP |
|||
#undef onestate |
|||
#undef INIT |
|||
#undef INC |
|||
#undef ISSTATEIN |
|||
#undef FWD |
|||
#undef BACK |
|||
#undef ISSETBACK |
|||
#undef SNAMES |
|||
|
|||
/* macros for manipulating states, large version */ |
|||
#define states unsigned char * |
|||
#define CLEAR(v) memset(v, 0, m->g->nstates) |
|||
#define SET0(v, n) ((v)[n] = 0) |
|||
#define SET1(v, n) ((v)[n] = 1) |
|||
#define ISSET(v, n) ((v)[n]) |
|||
#define ASSIGN(d, s) memcpy(d, s, m->g->nstates) |
|||
#define EQ(a, b) (memcmp(a, b, m->g->nstates) == 0) |
|||
#define STATEVARS int vn; unsigned char *space |
|||
#define STATESETUP(m, nv) { (m)->space = malloc((nv)*(m)->g->nstates); \ |
|||
if ((m)->space == NULL) return(REG_ESPACE); \ |
|||
(m)->vn = 0; } |
|||
#define STATETEARDOWN(m) { free((m)->space); } |
|||
#define SETUP(v) ((v) = &m->space[m->vn++ * m->g->nstates]) |
|||
#define onestate int |
|||
#define INIT(o, n) ((o) = (n)) |
|||
#define INC(o) ((o)++) |
|||
#define ISSTATEIN(v, o) ((v)[o]) |
|||
/* some abbreviations; note that some of these know variable names! */ |
|||
/* do "if I'm here, I can also be there" etc without branches */ |
|||
#define FWD(dst, src, n) ((dst)[here+(n)] |= (src)[here]) |
|||
#define BACK(dst, src, n) ((dst)[here-(n)] |= (src)[here]) |
|||
#define ISSETBACK(v, n) ((v)[here - (n)]) |
|||
/* function names */ |
|||
#define LNAMES /* flag */ |
|||
|
|||
#include "engine.c" |
|||
|
|||
/* |
|||
- regexec - interface for matching |
|||
= API_EXPORT(int) regexec(const regex_t *, const char *, size_t, \ |
|||
= regmatch_t [], int); |
|||
= #define REG_NOTBOL 00001 |
|||
= #define REG_NOTEOL 00002 |
|||
= #define REG_STARTEND 00004 |
|||
= #define REG_TRACE 00400 // tracing of execution |
|||
= #define REG_LARGE 01000 // force large representation |
|||
= #define REG_BACKR 02000 // force use of backref code |
|||
* |
|||
* We put this here so we can exploit knowledge of the state representation |
|||
* when choosing which matcher to call. Also, by this point the matchers |
|||
* have been prototyped. |
|||
*/ |
|||
API_EXPORT(int) /* 0 success, REG_NOMATCH failure */ |
|||
regexec(preg, string, nmatch, pmatch, eflags) |
|||
const regex_t *preg; |
|||
const char *string; |
|||
size_t nmatch; |
|||
regmatch_t pmatch[]; |
|||
int eflags; |
|||
{ |
|||
register struct re_guts *g = preg->re_g; |
|||
#ifdef REDEBUG |
|||
# define GOODFLAGS(f) (f) |
|||
#else |
|||
# define GOODFLAGS(f) ((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND)) |
|||
#endif |
|||
|
|||
if (preg->re_magic != MAGIC1 || g->magic != MAGIC2) |
|||
return(REG_BADPAT); |
|||
assert(!(g->iflags&BAD)); |
|||
if (g->iflags&BAD) /* backstop for no-debug case */ |
|||
return(REG_BADPAT); |
|||
eflags = GOODFLAGS(eflags); |
|||
|
|||
if (g->nstates <= CHAR_BIT*sizeof(states1) && !(eflags®_LARGE)) |
|||
return(smatcher(g, (unsigned char *)string, nmatch, pmatch, eflags)); |
|||
else |
|||
return(lmatcher(g, (unsigned char *)string, nmatch, pmatch, eflags)); |
|||
} |
|||
@ -1,37 +0,0 @@ |
|||
#include <sys/types.h> |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
|
|||
#include "regex.h" |
|||
#include "utils.h" |
|||
#include "regex2.h" |
|||
|
|||
/* |
|||
- regfree - free everything |
|||
= API_EXPORT(void) regfree(regex_t *); |
|||
*/ |
|||
API_EXPORT(void) |
|||
regfree(preg) |
|||
regex_t *preg; |
|||
{ |
|||
register struct re_guts *g; |
|||
|
|||
if (preg->re_magic != MAGIC1) /* oops */ |
|||
return; /* nice to complain, but hard */ |
|||
|
|||
g = preg->re_g; |
|||
if (g == NULL || g->magic != MAGIC2) /* oops again */ |
|||
return; |
|||
preg->re_magic = 0; /* mark it invalid */ |
|||
g->magic = 0; /* mark it invalid */ |
|||
|
|||
if (g->strip != NULL) |
|||
free((char *)g->strip); |
|||
if (g->sets != NULL) |
|||
free((char *)g->sets); |
|||
if (g->setbits != NULL) |
|||
free((char *)g->setbits); |
|||
if (g->must != NULL) |
|||
free(g->must); |
|||
free((char *)g); |
|||
} |
|||
@ -1,316 +0,0 @@ |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
|
|||
/* |
|||
- split - divide a string into fields, like awk split() |
|||
= int split(char *string, char *fields[], int nfields, char *sep); |
|||
*/ |
|||
int /* number of fields, including overflow */ |
|||
split(string, fields, nfields, sep) |
|||
char *string; |
|||
char *fields[]; /* list is not NULL-terminated */ |
|||
int nfields; /* number of entries available in fields[] */ |
|||
char *sep; /* "" white, "c" single char, "ab" [ab]+ */ |
|||
{ |
|||
register char *p = string; |
|||
register char c; /* latest character */ |
|||
register char sepc = sep[0]; |
|||
register char sepc2; |
|||
register int fn; |
|||
register char **fp = fields; |
|||
register char *sepp; |
|||
register int trimtrail; |
|||
|
|||
/* white space */ |
|||
if (sepc == '\0') { |
|||
while ((c = *p++) == ' ' || c == '\t') |
|||
continue; |
|||
p--; |
|||
trimtrail = 1; |
|||
sep = " \t"; /* note, code below knows this is 2 long */ |
|||
sepc = ' '; |
|||
} else |
|||
trimtrail = 0; |
|||
sepc2 = sep[1]; /* now we can safely pick this up */ |
|||
|
|||
/* catch empties */ |
|||
if (*p == '\0') |
|||
return(0); |
|||
|
|||
/* single separator */ |
|||
if (sepc2 == '\0') { |
|||
fn = nfields; |
|||
for (;;) { |
|||
*fp++ = p; |
|||
fn--; |
|||
if (fn == 0) |
|||
break; |
|||
while ((c = *p++) != sepc) |
|||
if (c == '\0') |
|||
return(nfields - fn); |
|||
*(p-1) = '\0'; |
|||
} |
|||
/* we have overflowed the fields vector -- just count them */ |
|||
fn = nfields; |
|||
for (;;) { |
|||
while ((c = *p++) != sepc) |
|||
if (c == '\0') |
|||
return(fn); |
|||
fn++; |
|||
} |
|||
/* not reached */ |
|||
} |
|||
|
|||
/* two separators */ |
|||
if (sep[2] == '\0') { |
|||
fn = nfields; |
|||
for (;;) { |
|||
*fp++ = p; |
|||
fn--; |
|||
while ((c = *p++) != sepc && c != sepc2) |
|||
if (c == '\0') { |
|||
if (trimtrail && **(fp-1) == '\0') |
|||
fn++; |
|||
return(nfields - fn); |
|||
} |
|||
if (fn == 0) |
|||
break; |
|||
*(p-1) = '\0'; |
|||
while ((c = *p++) == sepc || c == sepc2) |
|||
continue; |
|||
p--; |
|||
} |
|||
/* we have overflowed the fields vector -- just count them */ |
|||
fn = nfields; |
|||
while (c != '\0') { |
|||
while ((c = *p++) == sepc || c == sepc2) |
|||
continue; |
|||
p--; |
|||
fn++; |
|||
while ((c = *p++) != '\0' && c != sepc && c != sepc2) |
|||
continue; |
|||
} |
|||
/* might have to trim trailing white space */ |
|||
if (trimtrail) { |
|||
p--; |
|||
while ((c = *--p) == sepc || c == sepc2) |
|||
continue; |
|||
p++; |
|||
if (*p != '\0') { |
|||
if (fn == nfields+1) |
|||
*p = '\0'; |
|||
fn--; |
|||
} |
|||
} |
|||
return(fn); |
|||
} |
|||
|
|||
/* n separators */ |
|||
fn = 0; |
|||
for (;;) { |
|||
if (fn < nfields) |
|||
*fp++ = p; |
|||
fn++; |
|||
for (;;) { |
|||
c = *p++; |
|||
if (c == '\0') |
|||
return(fn); |
|||
sepp = sep; |
|||
while ((sepc = *sepp++) != '\0' && sepc != c) |
|||
continue; |
|||
if (sepc != '\0') /* it was a separator */ |
|||
break; |
|||
} |
|||
if (fn < nfields) |
|||
*(p-1) = '\0'; |
|||
for (;;) { |
|||
c = *p++; |
|||
sepp = sep; |
|||
while ((sepc = *sepp++) != '\0' && sepc != c) |
|||
continue; |
|||
if (sepc == '\0') /* it wasn't a separator */ |
|||
break; |
|||
} |
|||
p--; |
|||
} |
|||
|
|||
/* not reached */ |
|||
} |
|||
|
|||
#ifdef TEST_SPLIT |
|||
|
|||
|
|||
/* |
|||
* test program |
|||
* pgm runs regression |
|||
* pgm sep splits stdin lines by sep |
|||
* pgm str sep splits str by sep |
|||
* pgm str sep n splits str by sep n times |
|||
*/ |
|||
int |
|||
main(argc, argv) |
|||
int argc; |
|||
char *argv[]; |
|||
{ |
|||
char buf[512]; |
|||
register int n; |
|||
# define MNF 10 |
|||
char *fields[MNF]; |
|||
|
|||
if (argc > 4) |
|||
for (n = atoi(argv[3]); n > 0; n--) { |
|||
(void) strcpy(buf, argv[1]); |
|||
} |
|||
else if (argc > 3) |
|||
for (n = atoi(argv[3]); n > 0; n--) { |
|||
(void) strcpy(buf, argv[1]); |
|||
(void) split(buf, fields, MNF, argv[2]); |
|||
} |
|||
else if (argc > 2) |
|||
dosplit(argv[1], argv[2]); |
|||
else if (argc > 1) |
|||
while (fgets(buf, sizeof(buf), stdin) != NULL) { |
|||
buf[strlen(buf)-1] = '\0'; /* stomp newline */ |
|||
dosplit(buf, argv[1]); |
|||
} |
|||
else |
|||
regress(); |
|||
|
|||
exit(0); |
|||
} |
|||
|
|||
dosplit(string, seps) |
|||
char *string; |
|||
char *seps; |
|||
{ |
|||
# define NF 5 |
|||
char *fields[NF]; |
|||
register int nf; |
|||
|
|||
nf = split(string, fields, NF, seps); |
|||
print(nf, NF, fields); |
|||
} |
|||
|
|||
print(nf, nfp, fields) |
|||
int nf; |
|||
int nfp; |
|||
char *fields[]; |
|||
{ |
|||
register int fn; |
|||
register int bound; |
|||
|
|||
bound = (nf > nfp) ? nfp : nf; |
|||
printf("%d:\t", nf); |
|||
for (fn = 0; fn < bound; fn++) |
|||
printf("\"%s\"%s", fields[fn], (fn+1 < nf) ? ", " : "\n"); |
|||
} |
|||
|
|||
#define RNF 5 /* some table entries know this */ |
|||
struct { |
|||
char *str; |
|||
char *seps; |
|||
int nf; |
|||
char *fi[RNF]; |
|||
} tests[] = { |
|||
"", " ", 0, { "" }, |
|||
" ", " ", 2, { "", "" }, |
|||
"x", " ", 1, { "x" }, |
|||
"xy", " ", 1, { "xy" }, |
|||
"x y", " ", 2, { "x", "y" }, |
|||
"abc def g ", " ", 5, { "abc", "def", "", "g", "" }, |
|||
" a bcd", " ", 4, { "", "", "a", "bcd" }, |
|||
"a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" }, |
|||
" a b c d ", " ", 6, { "", "a", "b", "c", "d " }, |
|||
|
|||
"", " _", 0, { "" }, |
|||
" ", " _", 2, { "", "" }, |
|||
"x", " _", 1, { "x" }, |
|||
"x y", " _", 2, { "x", "y" }, |
|||
"ab _ cd", " _", 2, { "ab", "cd" }, |
|||
" a_b c ", " _", 5, { "", "a", "b", "c", "" }, |
|||
"a b c_d e f", " _", 6, { "a", "b", "c", "d", "e f" }, |
|||
" a b c d ", " _", 6, { "", "a", "b", "c", "d " }, |
|||
|
|||
"", " _~", 0, { "" }, |
|||
" ", " _~", 2, { "", "" }, |
|||
"x", " _~", 1, { "x" }, |
|||
"x y", " _~", 2, { "x", "y" }, |
|||
"ab _~ cd", " _~", 2, { "ab", "cd" }, |
|||
" a_b c~", " _~", 5, { "", "a", "b", "c", "" }, |
|||
"a b_c d~e f", " _~", 6, { "a", "b", "c", "d", "e f" }, |
|||
"~a b c d ", " _~", 6, { "", "a", "b", "c", "d " }, |
|||
|
|||
"", " _~-", 0, { "" }, |
|||
" ", " _~-", 2, { "", "" }, |
|||
"x", " _~-", 1, { "x" }, |
|||
"x y", " _~-", 2, { "x", "y" }, |
|||
"ab _~- cd", " _~-", 2, { "ab", "cd" }, |
|||
" a_b c~", " _~-", 5, { "", "a", "b", "c", "" }, |
|||
"a b_c-d~e f", " _~-", 6, { "a", "b", "c", "d", "e f" }, |
|||
"~a-b c d ", " _~-", 6, { "", "a", "b", "c", "d " }, |
|||
|
|||
"", " ", 0, { "" }, |
|||
" ", " ", 2, { "", "" }, |
|||
"x", " ", 1, { "x" }, |
|||
"xy", " ", 1, { "xy" }, |
|||
"x y", " ", 2, { "x", "y" }, |
|||
"abc def g ", " ", 4, { "abc", "def", "g", "" }, |
|||
" a bcd", " ", 3, { "", "a", "bcd" }, |
|||
"a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" }, |
|||
" a b c d ", " ", 6, { "", "a", "b", "c", "d " }, |
|||
|
|||
"", "", 0, { "" }, |
|||
" ", "", 0, { "" }, |
|||
"x", "", 1, { "x" }, |
|||
"xy", "", 1, { "xy" }, |
|||
"x y", "", 2, { "x", "y" }, |
|||
"abc def g ", "", 3, { "abc", "def", "g" }, |
|||
"\t a bcd", "", 2, { "a", "bcd" }, |
|||
" a \tb\t c ", "", 3, { "a", "b", "c" }, |
|||
"a b c d e ", "", 5, { "a", "b", "c", "d", "e" }, |
|||
"a b\tc d e f", "", 6, { "a", "b", "c", "d", "e f" }, |
|||
" a b c d e f ", "", 6, { "a", "b", "c", "d", "e f " }, |
|||
|
|||
NULL, NULL, 0, { NULL }, |
|||
}; |
|||
|
|||
regress() |
|||
{ |
|||
char buf[512]; |
|||
register int n; |
|||
char *fields[RNF+1]; |
|||
register int nf; |
|||
register int i; |
|||
register int printit; |
|||
register char *f; |
|||
|
|||
for (n = 0; tests[n].str != NULL; n++) { |
|||
(void) strcpy(buf, tests[n].str); |
|||
fields[RNF] = NULL; |
|||
nf = split(buf, fields, RNF, tests[n].seps); |
|||
printit = 0; |
|||
if (nf != tests[n].nf) { |
|||
printf("split `%s' by `%s' gave %d fields, not %d\n", |
|||
tests[n].str, tests[n].seps, nf, tests[n].nf); |
|||
printit = 1; |
|||
} else if (fields[RNF] != NULL) { |
|||
printf("split() went beyond array end\n"); |
|||
printit = 1; |
|||
} else { |
|||
for (i = 0; i < nf && i < RNF; i++) { |
|||
f = fields[i]; |
|||
if (f == NULL) |
|||
f = "(NULL)"; |
|||
if (strcmp(f, tests[n].fi[i]) != 0) { |
|||
printf("split `%s' by `%s', field %d is `%s', not `%s'\n", |
|||
tests[n].str, tests[n].seps, |
|||
i, fields[i], tests[n].fi[i]); |
|||
printit = 1; |
|||
} |
|||
} |
|||
} |
|||
if (printit) |
|||
print(nf, RNF, fields); |
|||
} |
|||
} |
|||
#endif |
|||
@ -1,475 +0,0 @@ |
|||
# regular expression test set |
|||
# Lines are at least three fields, separated by one or more tabs. "" stands |
|||
# for an empty field. First field is an RE. Second field is flags. If |
|||
# C flag given, regcomp() is expected to fail, and the third field is the |
|||
# error name (minus the leading REG_). |
|||
# |
|||
# Otherwise it is expected to succeed, and the third field is the string to |
|||
# try matching it against. If there is no fourth field, the match is |
|||
# expected to fail. If there is a fourth field, it is the substring that |
|||
# the RE is expected to match. If there is a fifth field, it is a comma- |
|||
# separated list of what the subexpressions should match, with - indicating |
|||
# no match for that one. In both the fourth and fifth fields, a (sub)field |
|||
# starting with @ indicates that the (sub)expression is expected to match |
|||
# a null string followed by the stuff after the @; this provides a way to |
|||
# test where null strings match. The character `N' in REs and strings |
|||
# is newline, `S' is space, `T' is tab, `Z' is NUL. |
|||
# |
|||
# The full list of flags: |
|||
# - placeholder, does nothing |
|||
# b RE is a BRE, not an ERE |
|||
# & try it as both an ERE and a BRE |
|||
# C regcomp() error expected, third field is error name |
|||
# i REG_ICASE |
|||
# m ("mundane") REG_NOSPEC |
|||
# s REG_NOSUB (not really testable) |
|||
# n REG_NEWLINE |
|||
# ^ REG_NOTBOL |
|||
# $ REG_NOTEOL |
|||
# # REG_STARTEND (see below) |
|||
# p REG_PEND |
|||
# |
|||
# For REG_STARTEND, the start/end offsets are those of the substring |
|||
# enclosed in (). |
|||
|
|||
# basics |
|||
a & a a |
|||
abc & abc abc |
|||
abc|de - abc abc |
|||
a|b|c - abc a |
|||
|
|||
# parentheses and perversions thereof |
|||
a(b)c - abc abc |
|||
a\(b\)c b abc abc |
|||
a( C EPAREN |
|||
a( b a( a( |
|||
a\( - a( a( |
|||
a\( bC EPAREN |
|||
a\(b bC EPAREN |
|||
a(b C EPAREN |
|||
a(b b a(b a(b |
|||
# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly) |
|||
a) - a) a) |
|||
) - ) ) |
|||
# end gagging (in a just world, those *should* give EPAREN) |
|||
a) b a) a) |
|||
a\) bC EPAREN |
|||
\) bC EPAREN |
|||
a()b - ab ab |
|||
a\(\)b b ab ab |
|||
|
|||
# anchoring and REG_NEWLINE |
|||
^abc$ & abc abc |
|||
a^b - a^b |
|||
a^b b a^b a^b |
|||
a$b - a$b |
|||
a$b b a$b a$b |
|||
^ & abc @abc |
|||
$ & abc @ |
|||
^$ & "" @ |
|||
$^ - "" @ |
|||
\($\)\(^\) b "" @ |
|||
# stop retching, those are legitimate (although disgusting) |
|||
^^ - "" @ |
|||
$$ - "" @ |
|||
b$ & abNc |
|||
b$ &n abNc b |
|||
^b$ & aNbNc |
|||
^b$ &n aNbNc b |
|||
^$ &n aNNb @Nb |
|||
^$ n abc |
|||
^$ n abcN @ |
|||
$^ n aNNb @Nb |
|||
\($\)\(^\) bn aNNb @Nb |
|||
^^ n^ aNNb @Nb |
|||
$$ n aNNb @NN |
|||
^a ^ a |
|||
a$ $ a |
|||
^a ^n aNb |
|||
^b ^n aNb b |
|||
a$ $n bNa |
|||
b$ $n bNa b |
|||
a*(^b$)c* - b b |
|||
a*\(^b$\)c* b b b |
|||
|
|||
# certain syntax errors and non-errors |
|||
| C EMPTY |
|||
| b | | |
|||
* C BADRPT |
|||
* b * * |
|||
+ C BADRPT |
|||
? C BADRPT |
|||
"" &C EMPTY |
|||
() - abc @abc |
|||
\(\) b abc @abc |
|||
a||b C EMPTY |
|||
|ab C EMPTY |
|||
ab| C EMPTY |
|||
(|a)b C EMPTY |
|||
(a|)b C EMPTY |
|||
(*a) C BADRPT |
|||
(+a) C BADRPT |
|||
(?a) C BADRPT |
|||
({1}a) C BADRPT |
|||
\(\{1\}a\) bC BADRPT |
|||
(a|*b) C BADRPT |
|||
(a|+b) C BADRPT |
|||
(a|?b) C BADRPT |
|||
(a|{1}b) C BADRPT |
|||
^* C BADRPT |
|||
^* b * * |
|||
^+ C BADRPT |
|||
^? C BADRPT |
|||
^{1} C BADRPT |
|||
^\{1\} bC BADRPT |
|||
|
|||
# metacharacters, backslashes |
|||
a.c & abc abc |
|||
a[bc]d & abd abd |
|||
a\*c & a*c a*c |
|||
a\\b & a\b a\b |
|||
a\\\*b & a\*b a\*b |
|||
a\bc & abc abc |
|||
a\ &C EESCAPE |
|||
a\\bc & a\bc a\bc |
|||
\{ bC BADRPT |
|||
a\[b & a[b a[b |
|||
a[b &C EBRACK |
|||
# trailing $ is a peculiar special case for the BRE code |
|||
a$ & a a |
|||
a$ & a$ |
|||
a\$ & a |
|||
a\$ & a$ a$ |
|||
a\\$ & a |
|||
a\\$ & a$ |
|||
a\\$ & a\$ |
|||
a\\$ & a\ a\ |
|||
|
|||
# back references, ugh |
|||
a\(b\)\2c bC ESUBREG |
|||
a\(b\1\)c bC ESUBREG |
|||
a\(b*\)c\1d b abbcbbd abbcbbd bb |
|||
a\(b*\)c\1d b abbcbd |
|||
a\(b*\)c\1d b abbcbbbd |
|||
^\(.\)\1 b abc |
|||
a\([bc]\)\1d b abcdabbd abbd b |
|||
a\(\([bc]\)\2\)*d b abbccd abbccd |
|||
a\(\([bc]\)\2\)*d b abbcbd |
|||
# actually, this next one probably ought to fail, but the spec is unclear |
|||
a\(\(b\)*\2\)*d b abbbd abbbd |
|||
# here is a case that no NFA implementation does right |
|||
\(ab*\)[ab]*\1 b ababaaa ababaaa a |
|||
# check out normal matching in the presence of back refs |
|||
\(a\)\1bcd b aabcd aabcd |
|||
\(a\)\1bc*d b aabcd aabcd |
|||
\(a\)\1bc*d b aabd aabd |
|||
\(a\)\1bc*d b aabcccd aabcccd |
|||
\(a\)\1bc*[ce]d b aabcccd aabcccd |
|||
^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd |
|||
|
|||
# ordinary repetitions |
|||
ab*c & abc abc |
|||
ab+c - abc abc |
|||
ab?c - abc abc |
|||
a\(*\)b b a*b a*b |
|||
a\(**\)b b ab ab |
|||
a\(***\)b bC BADRPT |
|||
*a b *a *a |
|||
**a b a a |
|||
***a bC BADRPT |
|||
|
|||
# the dreaded bounded repetitions |
|||
{ & { { |
|||
{abc & {abc {abc |
|||
{1 C BADRPT |
|||
{1} C BADRPT |
|||
a{b & a{b a{b |
|||
a{1}b - ab ab |
|||
a\{1\}b b ab ab |
|||
a{1,}b - ab ab |
|||
a\{1,\}b b ab ab |
|||
a{1,2}b - aab aab |
|||
a\{1,2\}b b aab aab |
|||
a{1 C EBRACE |
|||
a\{1 bC EBRACE |
|||
a{1a C EBRACE |
|||
a\{1a bC EBRACE |
|||
a{1a} C BADBR |
|||
a\{1a\} bC BADBR |
|||
a{,2} - a{,2} a{,2} |
|||
a\{,2\} bC BADBR |
|||
a{,} - a{,} a{,} |
|||
a\{,\} bC BADBR |
|||
a{1,x} C BADBR |
|||
a\{1,x\} bC BADBR |
|||
a{1,x C EBRACE |
|||
a\{1,x bC EBRACE |
|||
a{300} C BADBR |
|||
a\{300\} bC BADBR |
|||
a{1,0} C BADBR |
|||
a\{1,0\} bC BADBR |
|||
ab{0,0}c - abcac ac |
|||
ab\{0,0\}c b abcac ac |
|||
ab{0,1}c - abcac abc |
|||
ab\{0,1\}c b abcac abc |
|||
ab{0,3}c - abbcac abbc |
|||
ab\{0,3\}c b abbcac abbc |
|||
ab{1,1}c - acabc abc |
|||
ab\{1,1\}c b acabc abc |
|||
ab{1,3}c - acabc abc |
|||
ab\{1,3\}c b acabc abc |
|||
ab{2,2}c - abcabbc abbc |
|||
ab\{2,2\}c b abcabbc abbc |
|||
ab{2,4}c - abcabbc abbc |
|||
ab\{2,4\}c b abcabbc abbc |
|||
((a{1,10}){1,10}){1,10} - a a a,a |
|||
|
|||
# multiple repetitions |
|||
a** &C BADRPT |
|||
a++ C BADRPT |
|||
a?? C BADRPT |
|||
a*+ C BADRPT |
|||
a*? C BADRPT |
|||
a+* C BADRPT |
|||
a+? C BADRPT |
|||
a?* C BADRPT |
|||
a?+ C BADRPT |
|||
a{1}{1} C BADRPT |
|||
a*{1} C BADRPT |
|||
a+{1} C BADRPT |
|||
a?{1} C BADRPT |
|||
a{1}* C BADRPT |
|||
a{1}+ C BADRPT |
|||
a{1}? C BADRPT |
|||
a*{b} - a{b} a{b} |
|||
a\{1\}\{1\} bC BADRPT |
|||
a*\{1\} bC BADRPT |
|||
a\{1\}* bC BADRPT |
|||
|
|||
# brackets, and numerous perversions thereof |
|||
a[b]c & abc abc |
|||
a[ab]c & abc abc |
|||
a[^ab]c & adc adc |
|||
a[]b]c & a]c a]c |
|||
a[[b]c & a[c a[c |
|||
a[-b]c & a-c a-c |
|||
a[^]b]c & adc adc |
|||
a[^-b]c & adc adc |
|||
a[b-]c & a-c a-c |
|||
a[b &C EBRACK |
|||
a[] &C EBRACK |
|||
a[1-3]c & a2c a2c |
|||
a[3-1]c &C ERANGE |
|||
a[1-3-5]c &C ERANGE |
|||
a[[.-.]--]c & a-c a-c |
|||
a[1- &C ERANGE |
|||
a[[. &C EBRACK |
|||
a[[.x &C EBRACK |
|||
a[[.x. &C EBRACK |
|||
a[[.x.] &C EBRACK |
|||
a[[.x.]] & ax ax |
|||
a[[.x,.]] &C ECOLLATE |
|||
a[[.one.]]b & a1b a1b |
|||
a[[.notdef.]]b &C ECOLLATE |
|||
a[[.].]]b & a]b a]b |
|||
a[[:alpha:]]c & abc abc |
|||
a[[:notdef:]]c &C ECTYPE |
|||
a[[: &C EBRACK |
|||
a[[:alpha &C EBRACK |
|||
a[[:alpha:] &C EBRACK |
|||
a[[:alpha,:] &C ECTYPE |
|||
a[[:]:]]b &C ECTYPE |
|||
a[[:-:]]b &C ECTYPE |
|||
a[[:alph:]] &C ECTYPE |
|||
a[[:alphabet:]] &C ECTYPE |
|||
[[:alnum:]]+ - -%@a0X- a0X |
|||
[[:alpha:]]+ - -%@aX0- aX |
|||
[[:blank:]]+ - aSSTb SST |
|||
[[:cntrl:]]+ - aNTb NT |
|||
[[:digit:]]+ - a019b 019 |
|||
[[:graph:]]+ - Sa%bS a%b |
|||
[[:lower:]]+ - AabC ab |
|||
[[:print:]]+ - NaSbN aSb |
|||
[[:punct:]]+ - S%-&T %-& |
|||
[[:space:]]+ - aSNTb SNT |
|||
[[:upper:]]+ - aBCd BC |
|||
[[:xdigit:]]+ - p0f3Cq 0f3C |
|||
a[[=b=]]c & abc abc |
|||
a[[= &C EBRACK |
|||
a[[=b &C EBRACK |
|||
a[[=b= &C EBRACK |
|||
a[[=b=] &C EBRACK |
|||
a[[=b,=]] &C ECOLLATE |
|||
a[[=one=]]b & a1b a1b |
|||
|
|||
# complexities |
|||
a(((b)))c - abc abc |
|||
a(b|(c))d - abd abd |
|||
a(b*|c)d - abbd abbd |
|||
# just gotta have one DFA-buster, of course |
|||
a[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab |
|||
# and an inline expansion in case somebody gets tricky |
|||
a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab |
|||
# and in case somebody just slips in an NFA... |
|||
a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night) - aaaaabaaaabaaaabaaaabweeknights aaaaabaaaabaaaabaaaabweeknights |
|||
# fish for anomalies as the number of states passes 32 |
|||
12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789 |
|||
123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890 |
|||
1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901 |
|||
12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012 |
|||
123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123 |
|||
# and one really big one, beyond any plausible word width |
|||
1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890 |
|||
# fish for problems as brackets go past 8 |
|||
[ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm |
|||
[ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo |
|||
[ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq |
|||
[ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq |
|||
|
|||
# subtleties of matching |
|||
abc & xabcy abc |
|||
a\(b\)?c\1d b acd |
|||
aBc i Abc Abc |
|||
a[Bc]*d i abBCcd abBCcd |
|||
0[[:upper:]]1 &i 0a1 0a1 |
|||
0[[:lower:]]1 &i 0A1 0A1 |
|||
a[^b]c &i abc |
|||
a[^b]c &i aBc |
|||
a[^b]c &i adc adc |
|||
[a]b[c] - abc abc |
|||
[a]b[a] - aba aba |
|||
[abc]b[abc] - abc abc |
|||
[abc]b[abd] - abd abd |
|||
a(b?c)+d - accd accd |
|||
(wee|week)(knights|night) - weeknights weeknights |
|||
(we|wee|week|frob)(knights|night|day) - weeknights weeknights |
|||
a[bc]d - xyzaaabcaababdacd abd |
|||
a[ab]c - aaabc abc |
|||
abc s abc abc |
|||
a* & b @b |
|||
|
|||
# Let's have some fun -- try to match a C comment. |
|||
# first the obvious, which looks okay at first glance... |
|||
/\*.*\*/ - /*x*/ /*x*/ |
|||
# but... |
|||
/\*.*\*/ - /*x*/y/*z*/ /*x*/y/*z*/ |
|||
# okay, we must not match */ inside; try to do that... |
|||
/\*([^*]|\*[^/])*\*/ - /*x*/ /*x*/ |
|||
/\*([^*]|\*[^/])*\*/ - /*x*/y/*z*/ /*x*/ |
|||
# but... |
|||
/\*([^*]|\*[^/])*\*/ - /*x**/y/*z*/ /*x**/y/*z*/ |
|||
# and a still fancier version, which does it right (I think)... |
|||
/\*([^*]|\*+[^*/])*\*+/ - /*x*/ /*x*/ |
|||
/\*([^*]|\*+[^*/])*\*+/ - /*x*/y/*z*/ /*x*/ |
|||
/\*([^*]|\*+[^*/])*\*+/ - /*x**/y/*z*/ /*x**/ |
|||
/\*([^*]|\*+[^*/])*\*+/ - /*x****/y/*z*/ /*x****/ |
|||
/\*([^*]|\*+[^*/])*\*+/ - /*x**x*/y/*z*/ /*x**x*/ |
|||
/\*([^*]|\*+[^*/])*\*+/ - /*x***x/y/*z*/ /*x***x/y/*z*/ |
|||
|
|||
# subexpressions |
|||
a(b)(c)d - abcd abcd b,c |
|||
a(((b)))c - abc abc b,b,b |
|||
a(b|(c))d - abd abd b,- |
|||
a(b*|c|e)d - abbd abbd bb |
|||
a(b*|c|e)d - acd acd c |
|||
a(b*|c|e)d - ad ad @d |
|||
a(b?)c - abc abc b |
|||
a(b?)c - ac ac @c |
|||
a(b+)c - abc abc b |
|||
a(b+)c - abbbc abbbc bbb |
|||
a(b*)c - ac ac @c |
|||
(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de |
|||
# the regression tester only asks for 9 subexpressions |
|||
a(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j |
|||
a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k |
|||
a([bc]?)c - abc abc b |
|||
a([bc]?)c - ac ac @c |
|||
a([bc]+)c - abc abc b |
|||
a([bc]+)c - abcc abcc bc |
|||
a([bc]+)bc - abcbc abcbc bc |
|||
a(bb+|b)b - abb abb b |
|||
a(bbb+|bb+|b)b - abb abb b |
|||
a(bbb+|bb+|b)b - abbb abbb bb |
|||
a(bbb+|bb+|b)bb - abbb abbb b |
|||
(.*).* - abcdef abcdef abcdef |
|||
(a*)* - bc @b @b |
|||
|
|||
# do we get the right subexpression when it is used more than once? |
|||
a(b|c)*d - ad ad - |
|||
a(b|c)*d - abcd abcd c |
|||
a(b|c)+d - abd abd b |
|||
a(b|c)+d - abcd abcd c |
|||
a(b|c?)+d - ad ad @d |
|||
a(b|c?)+d - abcd abcd @d |
|||
a(b|c){0,0}d - ad ad - |
|||
a(b|c){0,1}d - ad ad - |
|||
a(b|c){0,1}d - abd abd b |
|||
a(b|c){0,2}d - ad ad - |
|||
a(b|c){0,2}d - abcd abcd c |
|||
a(b|c){0,}d - ad ad - |
|||
a(b|c){0,}d - abcd abcd c |
|||
a(b|c){1,1}d - abd abd b |
|||
a(b|c){1,1}d - acd acd c |
|||
a(b|c){1,2}d - abd abd b |
|||
a(b|c){1,2}d - abcd abcd c |
|||
a(b|c){1,}d - abd abd b |
|||
a(b|c){1,}d - abcd abcd c |
|||
a(b|c){2,2}d - acbd acbd b |
|||
a(b|c){2,2}d - abcd abcd c |
|||
a(b|c){2,4}d - abcd abcd c |
|||
a(b|c){2,4}d - abcbd abcbd b |
|||
a(b|c){2,4}d - abcbcd abcbcd c |
|||
a(b|c){2,}d - abcd abcd c |
|||
a(b|c){2,}d - abcbd abcbd b |
|||
a(b+|((c)*))+d - abd abd @d,@d,- |
|||
a(b+|((c)*))+d - abcd abcd @d,@d,- |
|||
|
|||
# check out the STARTEND option |
|||
[abc] &# a(b)c b |
|||
[abc] &# a(d)c |
|||
[abc] &# a(bc)d b |
|||
[abc] &# a(dc)d c |
|||
. &# a()c |
|||
b.*c &# b(bc)c bc |
|||
b.* &# b(bc)c bc |
|||
.*c &# b(bc)c bc |
|||
|
|||
# plain strings, with the NOSPEC flag |
|||
abc m abc abc |
|||
abc m xabcy abc |
|||
abc m xyz |
|||
a*b m aba*b a*b |
|||
a*b m ab |
|||
"" mC EMPTY |
|||
|
|||
# cases involving NULs |
|||
aZb & a a |
|||
aZb &p a |
|||
aZb &p# (aZb) aZb |
|||
aZ*b &p# (ab) ab |
|||
a.b &# (aZb) aZb |
|||
a.* &# (aZb)c aZb |
|||
|
|||
# word boundaries (ick) |
|||
[[:<:]]a & a a |
|||
[[:<:]]a & ba |
|||
[[:<:]]a & -a a |
|||
a[[:>:]] & a a |
|||
a[[:>:]] & ab |
|||
a[[:>:]] & a- a |
|||
[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc |
|||
[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc |
|||
[[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc |
|||
[[:<:]]b.c[[:>:]] & a_bxc-byc_d-bzc-q bzc |
|||
[[:<:]].x..[[:>:]] & y_xa_-_xb_y-_xc_-axdc _xc_ |
|||
[[:<:]]a_b[[:>:]] & x_a_b |
|||
|
|||
# past problems, and suspected problems |
|||
(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1 |
|||
abcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop |
|||
abcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv |
|||
(ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN]) - CC11 CC11 |
|||
CC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11 |
|||
Char \([a-z0-9_]*\)\[.* b Char xyz[k Char xyz[k xyz |
|||
a?b - ab ab |
|||
-\{0,1\}[0-9]*$ b -5 -5 |
|||
@ -1,23 +0,0 @@ |
|||
/* utility definitions */ |
|||
|
|||
#ifdef _POSIX2_RE_DUP_MAX |
|||
#define DUPMAX _POSIX2_RE_DUP_MAX |
|||
#else |
|||
#define DUPMAX 255 |
|||
#endif |
|||
#define INFINITY (DUPMAX + 1) |
|||
#define NC (CHAR_MAX - CHAR_MIN + 1) |
|||
typedef unsigned char uch; |
|||
|
|||
/* switch off assertions (if not already off) if no REDEBUG */ |
|||
#ifndef REDEBUG |
|||
#ifndef NDEBUG |
|||
#define NDEBUG /* no assertions please */ |
|||
#endif |
|||
#endif |
|||
#include <assert.h> |
|||
|
|||
/* for old systems with bcopy() but no memmove() */ |
|||
#ifdef USEBCOPY |
|||
#define memmove(d, s, c) bcopy(s, d, c) |
|||
#endif |
|||
@ -1,8 +0,0 @@ |
|||
--TEST-- |
|||
RegReplace test 1 |
|||
--FILE-- |
|||
<?php $a="abc123"; |
|||
echo ereg_replace("123","def",$a)?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
abcdef |
|||
@ -1,8 +0,0 @@ |
|||
--TEST-- |
|||
RegReplace test 2 |
|||
--FILE-- |
|||
<?php $a="abc123"; |
|||
echo ereg_replace("123","",$a)?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
abc |
|||
@ -1,9 +0,0 @@ |
|||
--TEST-- |
|||
ereg_replace single-quote test |
|||
--FILE-- |
|||
<?php $a="\\'test"; |
|||
echo ereg_replace("\\\\'","'",$a) |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
'test |
|||
@ -1,17 +0,0 @@ |
|||
--TEST-- |
|||
simple ereg test |
|||
--FILE-- |
|||
<?php $a="This is a nice and simple string"; |
|||
if (ereg(".*nice and simple.*",$a)) { |
|||
echo "ok\n"; |
|||
} |
|||
if (!ereg(".*doesn't exist.*",$a)) { |
|||
echo "ok\n"; |
|||
} |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
ok |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
ok |
|||
@ -1,19 +0,0 @@ |
|||
--TEST-- |
|||
Test Regular expression register support in ereg |
|||
--FILE-- |
|||
<?php $a="This is a nice and simple string"; |
|||
echo ereg(".*(is).*(is).*",$a,$registers); |
|||
echo "\n"; |
|||
echo $registers[0]; |
|||
echo "\n"; |
|||
echo $registers[1]; |
|||
echo "\n"; |
|||
echo $registers[2]; |
|||
echo "\n"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
32 |
|||
This is a nice and simple string |
|||
is |
|||
is |
|||
@ -1,9 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg_replace of start-of-line |
|||
--FILE-- |
|||
<?php $a="This is a nice and simple string"; |
|||
echo ereg_replace("^This","That",$a); |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
That is a nice and simple string |
|||
@ -1,11 +0,0 @@ |
|||
--TEST-- |
|||
Test empty result buffer in reg_replace |
|||
--FILE-- |
|||
<?php |
|||
$a="abcd"; |
|||
$b=ereg_replace("abcd","",$a); |
|||
echo "strlen(\$b)=".strlen($b); |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
strlen($b)=0 |
|||
@ -1,9 +0,0 @@ |
|||
--TEST-- |
|||
Test back-references in regular expressions |
|||
--FILE-- |
|||
<?php |
|||
echo ereg_replace("([a-z]*)([-=+|]*)([0-9]+)","\\3 \\1 \\2\n","abc+-|=123"); |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
123 abc +-|= |
|||
@ -1,18 +0,0 @@ |
|||
--TEST-- |
|||
Test split() |
|||
--FILE-- |
|||
<?php |
|||
$a=split("[[:space:]]","this is a |
|||
test"); |
|||
echo count($a) . "\n"; |
|||
for ($i = 0; $i < count($a); $i++) { |
|||
echo $a[$i] . "\n"; |
|||
} |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
4 |
|||
this |
|||
is |
|||
a |
|||
test |
|||
@ -1,8 +0,0 @@ |
|||
--TEST-- |
|||
Long back references |
|||
--FILE-- |
|||
<?php $a="abc122222222223"; |
|||
echo ereg_replace("1(2*)3","\\1def\\1",$a)?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
abc2222222222def2222222222 |
|||
@ -1,8 +0,0 @@ |
|||
--TEST-- |
|||
\0 back reference |
|||
--FILE-- |
|||
<?php $a="abc123"; |
|||
echo ereg_replace("123","def\\0ghi",$a)?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
abcdef123ghi |
|||
@ -1,8 +0,0 @@ |
|||
--TEST-- |
|||
nonexisting back reference |
|||
--FILE-- |
|||
<?php $a="abc123"; |
|||
echo ereg_replace("123",'def\1ghi',$a)?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
abcdef\1ghi |
|||
@ -1,8 +0,0 @@ |
|||
--TEST-- |
|||
escapes in replace string |
|||
--FILE-- |
|||
<?php $a="abc123"; |
|||
echo ereg_replace("123","def\\g\\\\hi\\",$a)?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
abcdef\g\\hi\ |
|||
@ -1,8 +0,0 @@ |
|||
--TEST-- |
|||
backreferences not replaced recursively |
|||
--FILE-- |
|||
<?php $a="a\\2bxc"; |
|||
echo ereg_replace("a(.*)b(.*)c","\\1",$a)?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
\2 |
|||
@ -1,7 +0,0 @@ |
|||
--TEST-- |
|||
replace empty matches |
|||
--FILE-- |
|||
<?php echo ereg_replace("^","z","abc123")?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
zabc123 |
|||
@ -1,7 +0,0 @@ |
|||
--TEST-- |
|||
test backslash handling in regular expressions |
|||
--FILE-- |
|||
<?php echo ereg_replace('\?',"abc","?123?")?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
abc123abc |
|||
@ -1,153 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : basic functionality (with $regs) |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple, valid matches with ereg, specifying $regs |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern,$string) = $re; |
|||
echo "--> Pattern: '$pattern'; string: '$string'\n"; |
|||
var_dump(ereg($pattern, $string, $regs)); |
|||
var_dump($regs); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : basic functionality *** |
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; string: '--- ab ---' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(6) |
|||
array(3) { |
|||
[0]=> |
|||
string(6) "- ab -" |
|||
[1]=> |
|||
string(1) "a" |
|||
[2]=> |
|||
string(1) "b" |
|||
} |
|||
--> Pattern: '()'; string: '' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
array(2) { |
|||
[0]=> |
|||
bool(false) |
|||
[1]=> |
|||
bool(false) |
|||
} |
|||
--> Pattern: '()'; string: 'abcdef' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
array(2) { |
|||
[0]=> |
|||
bool(false) |
|||
[1]=> |
|||
bool(false) |
|||
} |
|||
--> Pattern: '[x]|[^x]'; string: 'abcdef' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "a" |
|||
} |
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; string: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(15) |
|||
array(6) { |
|||
[0]=> |
|||
string(15) "aaa bbb ccc ddd" |
|||
[1]=> |
|||
string(1) "a" |
|||
[2]=> |
|||
string(2) "aa" |
|||
[3]=> |
|||
string(3) "bbb" |
|||
[4]=> |
|||
string(3) "ccc" |
|||
[5]=> |
|||
string(3) "ddd" |
|||
} |
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; string: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(14) |
|||
array(1) { |
|||
[0]=> |
|||
string(14) "\`^.[$()|*+?{'" |
|||
} |
|||
--> Pattern: '\a'; string: 'a' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "a" |
|||
} |
|||
--> Pattern: '[0-9][^0-9]'; string: '2a' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(2) |
|||
array(1) { |
|||
[0]=> |
|||
string(2) "2a" |
|||
} |
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; string: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(62) |
|||
array(1) { |
|||
[0]=> |
|||
string(62) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
} |
|||
--> Pattern: '^[[:digit:]]{5}'; string: '0123456789' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(5) |
|||
array(1) { |
|||
[0]=> |
|||
string(5) "01234" |
|||
} |
|||
--> Pattern: '[[:digit:]]{5}$'; string: '0123456789' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(5) |
|||
array(1) { |
|||
[0]=> |
|||
string(5) "56789" |
|||
} |
|||
--> Pattern: '[[:blank:]]{1,10}'; string: ' |
|||
' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(2) |
|||
array(1) { |
|||
[0]=> |
|||
string(2) " " |
|||
} |
|||
--> Pattern: '[[:print:]]{3}'; string: ' a ' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(3) |
|||
array(1) { |
|||
[0]=> |
|||
string(3) " a " |
|||
} |
|||
Done |
|||
@ -1,82 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : basic functionality (without $regs) |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple, valid matches with ereg, without specifying $regs |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern,$string) = $re; |
|||
echo "--> Pattern: '$pattern'; string: '$string'\n"; |
|||
var_dump(ereg($pattern, $string)); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : basic functionality *** |
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; string: '--- ab ---' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '()'; string: '' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '()'; string: 'abcdef' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[x]|[^x]'; string: 'abcdef' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; string: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; string: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '\a'; string: 'a' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[0-9][^0-9]'; string: '2a' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; string: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '^[[:digit:]]{5}'; string: '0123456789' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[[:digit:]]{5}$'; string: '0123456789' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[[:blank:]]{1,10}'; string: ' |
|||
' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[[:print:]]{3}'; string: ' a ' |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
Done |
|||
@ -1,28 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : basic functionality - long RE |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a long RE with lots of matches |
|||
*/ |
|||
|
|||
var_dump(ereg(str_repeat('(.)', 2048), str_repeat('x', 2048))); |
|||
var_dump(ereg(str_repeat('(.)', 2048), str_repeat('x', 2048), $regs)); |
|||
var_dump(count($regs)); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(1) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(2048) |
|||
int(2049) |
|||
Done |
|||
@ -1,44 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : basic functionality - a few non-matches |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
$regs = 'original'; |
|||
|
|||
var_dump(ereg('A', 'a', $regs)); |
|||
var_dump(ereg('[A-Z]', '0', $regs)); |
|||
var_dump(ereg('(a){4}', 'aaa', $regs)); |
|||
var_dump(ereg('^a', 'ba', $regs)); |
|||
var_dump(ereg('b$', 'ba', $regs)); |
|||
var_dump(ereg('[:alpha:]', 'x', $regs)); |
|||
|
|||
// Ensure $regs is unchanged |
|||
var_dump($regs); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
bool(false) |
|||
string(8) "original" |
|||
Done |
|||
@ -1,49 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : error conditions - wrong number of args |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test wrong number of args |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : error conditions ***\n"; |
|||
|
|||
|
|||
//Test ereg with one more than the expected number of arguments |
|||
echo "\n-- Testing ereg() function with more than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
$string = 'string_val'; |
|||
$registers = array(1, 2); |
|||
$extra_arg = 10; |
|||
var_dump( ereg($pattern, $string, $registers, $extra_arg) ); |
|||
|
|||
// Testing ereg with one less than the expected number of arguments |
|||
echo "\n-- Testing ereg() function with less than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
var_dump( ereg($pattern) ); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : error conditions *** |
|||
|
|||
-- Testing ereg() function with more than expected no. of arguments -- |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg() expects at most 3 parameters, 4 given in %s on line %d |
|||
NULL |
|||
|
|||
-- Testing ereg() function with less than expected no. of arguments -- |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg() expects at least 2 parameters, 1 given in %s on line %d |
|||
NULL |
|||
Done |
|||
@ -1,118 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : error conditions - test bad regular expressions |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test bad regular expressions |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : error conditions ***\n"; |
|||
|
|||
$regs = 'original'; |
|||
|
|||
var_dump(ereg("", "hello")); |
|||
var_dump(ereg("c(d", "hello")); |
|||
var_dump(ereg("a[b", "hello")); |
|||
var_dump(ereg("c(d", "hello")); |
|||
var_dump(ereg("*", "hello")); |
|||
var_dump(ereg("+", "hello")); |
|||
var_dump(ereg("?", "hello")); |
|||
var_dump(ereg("(+?*)", "hello", $regs)); |
|||
var_dump(ereg("h{256}", "hello")); |
|||
var_dump(ereg("h|", "hello")); |
|||
var_dump(ereg("h{0}", "hello")); |
|||
var_dump(ereg("h{2,1}", "hello")); |
|||
var_dump(ereg('[a-c-e]', 'd')); |
|||
var_dump(ereg('\\', 'x')); |
|||
var_dump(ereg('([9-0])', '1', $regs)); |
|||
|
|||
//ensure $regs unchanged |
|||
var_dump($regs); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : error conditions *** |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_EBRACK in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_EESCAPE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
string(8) "original" |
|||
Done |
|||
@ -1,86 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg_replace() function : basic functionality |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string ereg_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple, valid matches with ereg_replace |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
$replacement = '[this is a replacement]'; |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern, $match) = $re; |
|||
echo "--> Pattern: '$pattern'; match: '$match'\n"; |
|||
var_dump(ereg_replace($pattern, $replacement, $match . ' this contains some matches ' . $match)); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : basic functionality *** |
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; match: '--- ab ---' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(82) "--[this is a replacement]-- this contains some matches --[this is a replacement]--" |
|||
--> Pattern: '()'; match: '' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(695) "[this is a replacement] [this is a replacement]t[this is a replacement]h[this is a replacement]i[this is a replacement]s[this is a replacement] [this is a replacement]c[this is a replacement]o[this is a replacement]n[this is a replacement]t[this is a replacement]a[this is a replacement]i[this is a replacement]n[this is a replacement]s[this is a replacement] [this is a replacement]s[this is a replacement]o[this is a replacement]m[this is a replacement]e[this is a replacement] [this is a replacement]m[this is a replacement]a[this is a replacement]t[this is a replacement]c[this is a replacement]h[this is a replacement]e[this is a replacement]s[this is a replacement] [this is a replacement]" |
|||
--> Pattern: '()'; match: 'abcdef' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(983) "[this is a replacement]a[this is a replacement]b[this is a replacement]c[this is a replacement]d[this is a replacement]e[this is a replacement]f[this is a replacement] [this is a replacement]t[this is a replacement]h[this is a replacement]i[this is a replacement]s[this is a replacement] [this is a replacement]c[this is a replacement]o[this is a replacement]n[this is a replacement]t[this is a replacement]a[this is a replacement]i[this is a replacement]n[this is a replacement]s[this is a replacement] [this is a replacement]s[this is a replacement]o[this is a replacement]m[this is a replacement]e[this is a replacement] [this is a replacement]m[this is a replacement]a[this is a replacement]t[this is a replacement]c[this is a replacement]h[this is a replacement]e[this is a replacement]s[this is a replacement] [this is a replacement]a[this is a replacement]b[this is a replacement]c[this is a replacement]d[this is a replacement]e[this is a replacement]f[this is a replacement]" |
|||
--> Pattern: '[x]|[^x]'; match: 'abcdef' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(920) "[this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement]" |
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; match: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(90) "--- [this is a replacement] --- this contains some matches --- [this is a replacement] ---" |
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; match: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(74) "[this is a replacement] this contains some matches [this is a replacement]" |
|||
--> Pattern: '\a'; match: 'a' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(118) "[this is a replacement] this cont[this is a replacement]ins some m[this is a replacement]tches [this is a replacement]" |
|||
--> Pattern: '[0-9][^0-9]'; match: '2a' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(74) "[this is a replacement] this contains some matches [this is a replacement]" |
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; match: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(152) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ this contains some matches 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
--> Pattern: '^[[:digit:]]{5}'; match: '0123456789' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(66) "[this is a replacement]56789 this contains some matches 0123456789" |
|||
--> Pattern: '[[:digit:]]{5}$'; match: '0123456789' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(66) "0123456789 this contains some matches 01234[this is a replacement]" |
|||
--> Pattern: '[[:blank:]]{1,10}'; match: ' |
|||
' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(163) " |
|||
[this is a replacement]this[this is a replacement]contains[this is a replacement]some[this is a replacement]matches[this is a replacement] |
|||
[this is a replacement]" |
|||
--> Pattern: '[[:print:]]{3}'; match: ' a ' |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(254) "[this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement] " |
|||
Done |
|||
@ -1,41 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg_replace() function : basic functionality - a few non-matches |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string ereg_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
$replacement = 'r'; |
|||
|
|||
var_dump(ereg_replace('A', $replacement, 'a')); |
|||
var_dump(ereg_replace('[A-Z]', $replacement, '0')); |
|||
var_dump(ereg_replace('(a){4}', $replacement, 'aaa')); |
|||
var_dump(ereg_replace('^a', $replacement, 'ba')); |
|||
var_dump(ereg_replace('b$', $replacement, 'ba')); |
|||
var_dump(ereg_replace('[:alpha:]', $replacement, 'x')); |
|||
|
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(1) "a" |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(1) "0" |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(3) "aaa" |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(2) "ba" |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(2) "ba" |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
string(1) "x" |
|||
Done |
|||
@ -1,46 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg_replace() function : error conditions - wrong number of args |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string ereg_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
echo "*** Testing ereg_replace() : error conditions ***\n"; |
|||
|
|||
|
|||
//Test ereg_replace with one more than the expected number of arguments |
|||
echo "\n-- Testing ereg_replace() function with more than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
$replacement = 'string_val'; |
|||
$string = 'string_val'; |
|||
$extra_arg = 10; |
|||
var_dump( ereg_replace($pattern, $replacement, $string, $extra_arg) ); |
|||
|
|||
// Testing ereg_replace with one less than the expected number of arguments |
|||
echo "\n-- Testing ereg_replace() function with less than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
$replacement = 'string_val'; |
|||
var_dump( ereg_replace($pattern, $replacement) ); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg_replace() : error conditions *** |
|||
|
|||
-- Testing ereg_replace() function with more than expected no. of arguments -- |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace() expects exactly 3 parameters, 4 given in %s on line %d |
|||
NULL |
|||
|
|||
-- Testing ereg_replace() function with less than expected no. of arguments -- |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace() expects exactly 3 parameters, 2 given in %s on line %d |
|||
NULL |
|||
Done |
|||
@ -1,106 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg_replace() function : error conditions - bad regular expressions |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string ereg_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
echo "*** Testing ereg_replace() : bad REs ***\n"; |
|||
var_dump(ereg_replace("", "hello", "some string")); |
|||
var_dump(ereg_replace("c(d", "hello", "some string")); |
|||
var_dump(ereg_replace("a[b", "hello", "some string")); |
|||
var_dump(ereg_replace("c(d", "hello", "some string"));; |
|||
var_dump(ereg_replace("*", "hello", "some string")); |
|||
var_dump(ereg_replace("+", "hello", "some string")); |
|||
var_dump(ereg_replace("?", "hello", "some string")); |
|||
var_dump(ereg_replace("(+?*)", "hello", "some string")); |
|||
var_dump(ereg_replace("h{256}", "hello", "some string")); |
|||
var_dump(ereg_replace("h|", "hello", "some string")); |
|||
var_dump(ereg_replace("h{0}", "hello", "some string")); |
|||
var_dump(ereg_replace("h{2,1}", "hello", "some string")); |
|||
var_dump(ereg_replace('[a-c-e]', 'd', "some string")); |
|||
var_dump(ereg_replace('\\', 'x', "some string")); |
|||
var_dump(ereg_replace('([9-0])', '1', "some string")); |
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg_replace() : bad REs *** |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_EBRACK in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_EESCAPE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function ereg_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: ereg_replace(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
Done |
|||
@ -1,205 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg_replace() function : usage variations - unexpected type arg 1 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string ereg_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing ereg_replace() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$replacement = 'new'; |
|||
$string = 'original'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for pattern |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( ereg_replace($value, $replacement, $string) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg_replace() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 8 - Object of class stdClass could not be converted to int, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Done |
|||
@ -1,193 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg_replace() function : usage variations - unexpected type arg 2 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string ereg_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing ereg_replace() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = b'ell'; |
|||
$string = 'hello!'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for replacement |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump(urlencode(ereg_replace($pattern, $value, $string))); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg_replace() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(6) "h9o%21" |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%D7o%21" |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%0Ao%21" |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%F6o%21" |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(%d) "h%so%21" |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 8 - Object of class stdClass could not be converted to int, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
Done |
|||
@ -1,198 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg_replace() function : usage variations - unexpected type arg 3 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string ereg_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing ereg_replace() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = '1'; |
|||
$replacement = 'new value'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for string |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( ereg_replace($pattern, $replacement, $value) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg_replace() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(1) "0" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(9) "new value" |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(13) "new value2345" |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(5) "-2345" |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(12) "new value0.5" |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(13) "-new value0.5" |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(28) "new value0new value234567000" |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(29) "new value.0765432new valueE-9" |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(3) "0.5" |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %sereg_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(9) "new value" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(9) "new value" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
Error: 2 - ereg_replace() expects parameter 3 to be string, object given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
Done |
|||
@ -1,208 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : usage variations - unexpected type arg 1 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
|
|||
echo "*** Testing ereg() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$string = '1'; |
|||
$registers = array(1, 2); |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for pattern |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( ereg($value, $string, $registers) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(65) |
|||
Error: 8 - Undefined variable: unset_var, %s(68) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
int(1) |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %sereg_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %sereg_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %sereg_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %sereg_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %sereg_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 2 - ereg(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 2 - ereg(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
int(1) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 2 - ereg(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
int(1) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 2 - ereg(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 2 - ereg(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 2 - ereg(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(74) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(75) |
|||
Error: 8 - Object of class stdClass to string conversion, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 2 - ereg(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(75) |
|||
Error: 2 - ereg(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
Done |
|||
@ -1,198 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : usage variations - unexpected type arg 2 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing ereg() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = '1'; |
|||
$registers = array(); |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for string |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( ereg($pattern, $value, $registers) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %sereg_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
Error: 2 - ereg() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %sereg_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
Error: 2 - ereg() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %sereg_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
Error: 2 - ereg() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %sereg_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
Error: 2 - ereg() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %sereg_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
Error: 2 - ereg() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
Error: 2 - ereg() expects parameter 2 to be string, object given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(74) |
|||
bool(false) |
|||
Done |
|||
@ -1,305 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : usage variations - unexpected type for arg 3 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing ereg() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = 'h(.*)lo!'; |
|||
$string = 'hello!'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// string data |
|||
"string", |
|||
'string', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for registers |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( ereg($pattern, $string, $value) ); |
|||
var_dump($value); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(61) |
|||
Error: 8 - Undefined variable: unset_var, %s(64) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value string |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value string |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(70) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function ereg() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
Done |
|||
@ -1,19 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : usage variations - pass non-variable as arg 3, which is pass-by-ref. |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int ereg(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
var_dump(ereg('l{2}', 'hello', str_repeat('x',1))); |
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Strict Standards: Only variables should be passed by reference in %s on line %d |
|||
|
|||
Deprecated: Function ereg() is deprecated in %s on line %d |
|||
int(2) |
|||
Done |
|||
@ -1,45 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : basic functionality - confirm case insensitivity |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Case-insensitive regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test basic functionality of eregi() |
|||
*/ |
|||
|
|||
echo "*** Testing eregi() : basic functionality ***\n"; |
|||
$string = <<<END |
|||
UPPERCASE WORDS |
|||
lowercase words |
|||
MIxED CaSe woRdS |
|||
END; |
|||
|
|||
var_dump(eregi('words', $string, $match1)); |
|||
var_dump($match1); |
|||
|
|||
var_dump(eregi('[[:lower:]]+[[:space:]]case', $string, $match2)); //character class lower should just match [a-z] but in case insensitive search matches [a-zA-Z] |
|||
var_dump($match2); |
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi() : basic functionality *** |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(5) |
|||
array(1) { |
|||
[0]=> |
|||
string(5) "WORDS" |
|||
} |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(10) |
|||
array(1) { |
|||
[0]=> |
|||
string(10) "MIxED CaSe" |
|||
} |
|||
Done |
|||
@ -1,153 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : basic functionality (with $regs) |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple, valid matches with eregi, specifying $regs |
|||
*/ |
|||
|
|||
echo "*** Testing eregi() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern,$string) = $re; |
|||
echo "--> Pattern: '$pattern'; string: '$string'\n"; |
|||
var_dump(eregi($pattern, $string, $regs)); |
|||
var_dump($regs); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi() : basic functionality *** |
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; string: '--- ab ---' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(6) |
|||
array(3) { |
|||
[0]=> |
|||
string(6) "- ab -" |
|||
[1]=> |
|||
string(1) "a" |
|||
[2]=> |
|||
string(1) "b" |
|||
} |
|||
--> Pattern: '()'; string: '' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
array(2) { |
|||
[0]=> |
|||
bool(false) |
|||
[1]=> |
|||
bool(false) |
|||
} |
|||
--> Pattern: '()'; string: 'abcdef' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
array(2) { |
|||
[0]=> |
|||
bool(false) |
|||
[1]=> |
|||
bool(false) |
|||
} |
|||
--> Pattern: '[x]|[^x]'; string: 'abcdef' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "a" |
|||
} |
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; string: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(15) |
|||
array(6) { |
|||
[0]=> |
|||
string(15) "aaa bbb ccc ddd" |
|||
[1]=> |
|||
string(1) "a" |
|||
[2]=> |
|||
string(2) "aa" |
|||
[3]=> |
|||
string(3) "bbb" |
|||
[4]=> |
|||
string(3) "ccc" |
|||
[5]=> |
|||
string(3) "ddd" |
|||
} |
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; string: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(14) |
|||
array(1) { |
|||
[0]=> |
|||
string(14) "\`^.[$()|*+?{'" |
|||
} |
|||
--> Pattern: '\a'; string: 'a' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "a" |
|||
} |
|||
--> Pattern: '[0-9][^0-9]'; string: '2a' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(2) |
|||
array(1) { |
|||
[0]=> |
|||
string(2) "2a" |
|||
} |
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; string: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(62) |
|||
array(1) { |
|||
[0]=> |
|||
string(62) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
} |
|||
--> Pattern: '^[[:digit:]]{5}'; string: '0123456789' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(5) |
|||
array(1) { |
|||
[0]=> |
|||
string(5) "01234" |
|||
} |
|||
--> Pattern: '[[:digit:]]{5}$'; string: '0123456789' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(5) |
|||
array(1) { |
|||
[0]=> |
|||
string(5) "56789" |
|||
} |
|||
--> Pattern: '[[:blank:]]{1,10}'; string: ' |
|||
' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(2) |
|||
array(1) { |
|||
[0]=> |
|||
string(2) " " |
|||
} |
|||
--> Pattern: '[[:print:]]{3}'; string: ' a ' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(3) |
|||
array(1) { |
|||
[0]=> |
|||
string(3) " a " |
|||
} |
|||
Done |
|||
@ -1,82 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : basic functionality (without $regs) |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple, valid matches with eregi, without specifying $regs |
|||
*/ |
|||
|
|||
echo "*** Testing eregi() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern,$string) = $re; |
|||
echo "--> Pattern: '$pattern'; string: '$string'\n"; |
|||
var_dump(eregi($pattern, $string)); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi() : basic functionality *** |
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; string: '--- ab ---' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '()'; string: '' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '()'; string: 'abcdef' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[x]|[^x]'; string: 'abcdef' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; string: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; string: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '\a'; string: 'a' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[0-9][^0-9]'; string: '2a' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; string: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '^[[:digit:]]{5}'; string: '0123456789' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[[:digit:]]{5}$'; string: '0123456789' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[[:blank:]]{1,10}'; string: ' |
|||
' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
--> Pattern: '[[:print:]]{3}'; string: ' a ' |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
Done |
|||
@ -1,28 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : basic functionality - long RE |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a long RE with lots of matches |
|||
*/ |
|||
|
|||
var_dump(eregi(str_repeat('(.)', 2048), str_repeat('x', 2048))); |
|||
var_dump(eregi(str_repeat('(.)', 2048), str_repeat('x', 2048), $regs)); |
|||
var_dump(count($regs)); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(1) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(2048) |
|||
int(2049) |
|||
Done |
|||
@ -1,40 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : basic functionality - a few non-matches |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
$regs = 'original'; |
|||
|
|||
var_dump(eregi('[A-Z]', '0', $regs)); |
|||
var_dump(eregi('(a){4}', 'aaa', $regs)); |
|||
var_dump(eregi('^a', 'ba', $regs)); |
|||
var_dump(eregi('b$', 'ba', $regs)); |
|||
var_dump(eregi('[:alpha:]', 'x', $regs)); |
|||
|
|||
// Ensure $regs is unchanged |
|||
var_dump($regs); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
bool(false) |
|||
string(8) "original" |
|||
Done |
|||
@ -1,49 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : error conditions - wrong number of args |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test wrong number of args |
|||
*/ |
|||
|
|||
echo "*** Testing eregi() : error conditions ***\n"; |
|||
|
|||
|
|||
//Test eregi with one more than the expected number of arguments |
|||
echo "\n-- Testing eregi() function with more than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
$string = 'string_val'; |
|||
$registers = array(1, 2); |
|||
$extra_arg = 10; |
|||
var_dump( eregi($pattern, $string, $registers, $extra_arg) ); |
|||
|
|||
// Testing eregi with one less than the expected number of arguments |
|||
echo "\n-- Testing eregi() function with less than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
var_dump( eregi($pattern) ); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi() : error conditions *** |
|||
|
|||
-- Testing eregi() function with more than expected no. of arguments -- |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi() expects at most 3 parameters, 4 given in %s on line %d |
|||
NULL |
|||
|
|||
-- Testing eregi() function with less than expected no. of arguments -- |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi() expects at least 2 parameters, 1 given in %s on line %d |
|||
NULL |
|||
Done |
|||
@ -1,118 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : error conditions - test bad regular expressions |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test bad regular expressions |
|||
*/ |
|||
|
|||
echo "*** Testing eregi() : error conditions ***\n"; |
|||
|
|||
$regs = 'original'; |
|||
|
|||
var_dump(eregi("", "hello")); |
|||
var_dump(eregi("c(d", "hello")); |
|||
var_dump(eregi("a[b", "hello")); |
|||
var_dump(eregi("c(d", "hello")); |
|||
var_dump(eregi("*", "hello")); |
|||
var_dump(eregi("+", "hello")); |
|||
var_dump(eregi("?", "hello")); |
|||
var_dump(eregi("(+?*)", "hello", $regs)); |
|||
var_dump(eregi("h{256}", "hello")); |
|||
var_dump(eregi("h|", "hello")); |
|||
var_dump(eregi("h{0}", "hello")); |
|||
var_dump(eregi("h{2,1}", "hello")); |
|||
var_dump(eregi('[a-c-e]', 'd')); |
|||
var_dump(eregi('\\', 'x')); |
|||
var_dump(eregi('([9-0])', '1', $regs)); |
|||
|
|||
//ensure $regs unchanged |
|||
var_dump($regs); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi() : error conditions *** |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_EBRACK in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_EESCAPE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
string(8) "original" |
|||
Done |
|||
@ -1,38 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi_replace() function : basic functionality - confirm case insensitivity |
|||
--FILE-- |
|||
|
|||
<?php |
|||
/* Prototype : proto string eregi_replace(string pattern, string replacement, string string) |
|||
* Description: Case insensitive replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test basic functionality of eregi_replace() |
|||
*/ |
|||
|
|||
echo "*** Testing eregi_replace() : basic functionality ***\n"; |
|||
|
|||
$string = 'UPPERCASE WORDS, lowercase words, MIxED CaSe woRdS'; |
|||
|
|||
echo "String Before...\n"; |
|||
var_dump($string); |
|||
echo "\nString after...\n"; |
|||
|
|||
var_dump(eregi_replace('([[:lower:]]+) word', '\\1_character', $string)); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
|
|||
--EXPECTF-- |
|||
*** Testing eregi_replace() : basic functionality *** |
|||
String Before... |
|||
string(50) "UPPERCASE WORDS, lowercase words, MIxED CaSe woRdS" |
|||
|
|||
String after... |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(65) "UPPERCASE_characterS, lowercase_characters, MIxED CaSe_characterS" |
|||
Done |
|||
@ -1,86 +0,0 @@ |
|||
--TEST-- |
|||
Test ereg() function : basic functionality |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string eregi_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple, valid matches with eregi_replace |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
$replacement = '[this is a replacement]'; |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern, $match) = $re; |
|||
echo "--> Pattern: '$pattern'; match: '$match'\n"; |
|||
var_dump(eregi_replace($pattern, $replacement, $match . ' this contains some matches ' . $match)); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : basic functionality *** |
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; match: '--- ab ---' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(82) "--[this is a replacement]-- this contains some matches --[this is a replacement]--" |
|||
--> Pattern: '()'; match: '' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(695) "[this is a replacement] [this is a replacement]t[this is a replacement]h[this is a replacement]i[this is a replacement]s[this is a replacement] [this is a replacement]c[this is a replacement]o[this is a replacement]n[this is a replacement]t[this is a replacement]a[this is a replacement]i[this is a replacement]n[this is a replacement]s[this is a replacement] [this is a replacement]s[this is a replacement]o[this is a replacement]m[this is a replacement]e[this is a replacement] [this is a replacement]m[this is a replacement]a[this is a replacement]t[this is a replacement]c[this is a replacement]h[this is a replacement]e[this is a replacement]s[this is a replacement] [this is a replacement]" |
|||
--> Pattern: '()'; match: 'abcdef' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(983) "[this is a replacement]a[this is a replacement]b[this is a replacement]c[this is a replacement]d[this is a replacement]e[this is a replacement]f[this is a replacement] [this is a replacement]t[this is a replacement]h[this is a replacement]i[this is a replacement]s[this is a replacement] [this is a replacement]c[this is a replacement]o[this is a replacement]n[this is a replacement]t[this is a replacement]a[this is a replacement]i[this is a replacement]n[this is a replacement]s[this is a replacement] [this is a replacement]s[this is a replacement]o[this is a replacement]m[this is a replacement]e[this is a replacement] [this is a replacement]m[this is a replacement]a[this is a replacement]t[this is a replacement]c[this is a replacement]h[this is a replacement]e[this is a replacement]s[this is a replacement] [this is a replacement]a[this is a replacement]b[this is a replacement]c[this is a replacement]d[this is a replacement]e[this is a replacement]f[this is a replacement]" |
|||
--> Pattern: '[x]|[^x]'; match: 'abcdef' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(920) "[this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement]" |
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; match: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(90) "--- [this is a replacement] --- this contains some matches --- [this is a replacement] ---" |
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; match: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(74) "[this is a replacement] this contains some matches [this is a replacement]" |
|||
--> Pattern: '\a'; match: 'a' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(118) "[this is a replacement] this cont[this is a replacement]ins some m[this is a replacement]tches [this is a replacement]" |
|||
--> Pattern: '[0-9][^0-9]'; match: '2a' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(74) "[this is a replacement] this contains some matches [this is a replacement]" |
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; match: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(152) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ this contains some matches 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
--> Pattern: '^[[:digit:]]{5}'; match: '0123456789' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(66) "[this is a replacement]56789 this contains some matches 0123456789" |
|||
--> Pattern: '[[:digit:]]{5}$'; match: '0123456789' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(66) "0123456789 this contains some matches 01234[this is a replacement]" |
|||
--> Pattern: '[[:blank:]]{1,10}'; match: ' |
|||
' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(163) " |
|||
[this is a replacement]this[this is a replacement]contains[this is a replacement]some[this is a replacement]matches[this is a replacement] |
|||
[this is a replacement]" |
|||
--> Pattern: '[[:print:]]{3}'; match: ' a ' |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(254) "[this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement][this is a replacement] " |
|||
Done |
|||
@ -1,37 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi_replace() function : basic functionality - a few non-matches |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string eregi_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
$replacement = 'r'; |
|||
|
|||
var_dump(eregi_replace('[A-Z]', $replacement, '0')); |
|||
var_dump(eregi_replace('(a){4}', $replacement, 'aaa')); |
|||
var_dump(eregi_replace('^a', $replacement, 'ba')); |
|||
var_dump(eregi_replace('b$', $replacement, 'ba')); |
|||
var_dump(eregi_replace('[:alpha:]', $replacement, 'x')); |
|||
|
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(1) "0" |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(3) "aaa" |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(2) "ba" |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(2) "ba" |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
string(1) "x" |
|||
Done |
|||
@ -1,46 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi_replace() function : error conditions - wrong number of args |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string eregi_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
echo "*** Testing eregi_replace() : error conditions ***\n"; |
|||
|
|||
|
|||
//Test eregi_replace with one more than the expected number of arguments |
|||
echo "\n-- Testing eregi_replace() function with more than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
$replacement = 'string_val'; |
|||
$string = 'string_val'; |
|||
$extra_arg = 10; |
|||
var_dump( eregi_replace($pattern, $replacement, $string, $extra_arg) ); |
|||
|
|||
// Testing eregi_replace with one less than the expected number of arguments |
|||
echo "\n-- Testing eregi_replace() function with less than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
$replacement = 'string_val'; |
|||
var_dump( eregi_replace($pattern, $replacement) ); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi_replace() : error conditions *** |
|||
|
|||
-- Testing eregi_replace() function with more than expected no. of arguments -- |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace() expects exactly 3 parameters, 4 given in %s on line %d |
|||
NULL |
|||
|
|||
-- Testing eregi_replace() function with less than expected no. of arguments -- |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace() expects exactly 3 parameters, 2 given in %s on line %d |
|||
NULL |
|||
Done |
|||
@ -1,106 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi_replace() function : error conditions - bad regular expressions |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string eregi_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
echo "*** Testing eregi_replace() : bad REs ***\n"; |
|||
var_dump(eregi_replace("", "hello", "some string")); |
|||
var_dump(eregi_replace("c(d", "hello", "some string")); |
|||
var_dump(eregi_replace("a[b", "hello", "some string")); |
|||
var_dump(eregi_replace("c(d", "hello", "some string"));; |
|||
var_dump(eregi_replace("*", "hello", "some string")); |
|||
var_dump(eregi_replace("+", "hello", "some string")); |
|||
var_dump(eregi_replace("?", "hello", "some string")); |
|||
var_dump(eregi_replace("(+?*)", "hello", "some string")); |
|||
var_dump(eregi_replace("h{256}", "hello", "some string")); |
|||
var_dump(eregi_replace("h|", "hello", "some string")); |
|||
var_dump(eregi_replace("h{0}", "hello", "some string")); |
|||
var_dump(eregi_replace("h{2,1}", "hello", "some string")); |
|||
var_dump(eregi_replace('[a-c-e]', 'd', "some string")); |
|||
var_dump(eregi_replace('\\', 'x', "some string")); |
|||
var_dump(eregi_replace('([9-0])', '1', "some string")); |
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi_replace() : bad REs *** |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_EBRACK in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_EESCAPE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function eregi_replace() is deprecated in %s on line %d |
|||
|
|||
Warning: eregi_replace(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
Done |
|||
@ -1,205 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi_replace() function : usage variations - unexpected type arg 1 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string eregi_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing eregi_replace() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$replacement = 'new'; |
|||
$string = 'original'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for pattern |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( eregi_replace($value, $replacement, $string) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi_replace() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 8 - Object of class stdClass could not be converted to int, %s(74) |
|||
string(8) "original" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Done |
|||
@ -1,193 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi_replace() function : usage variations - unexpected type arg 2 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string eregi_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing eregi_replace() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = b'ell'; |
|||
$string = 'hello!'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for replacement |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump(urlencode(eregi_replace($pattern, $value, $string))); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi_replace() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(6) "h9o%21" |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%D7o%21" |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%0Ao%21" |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%F6o%21" |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(%d) "h%so%21" |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 8 - Object of class stdClass could not be converted to int, %s(74) |
|||
string(8) "h%01o%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "ho%21" |
|||
Done |
|||
@ -1,198 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi_replace() function : usage variations - unexpected type arg 3 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto string eregi_replace(string pattern, string replacement, string string) |
|||
* Description: Replace regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing eregi_replace() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = '1'; |
|||
$replacement = 'new value'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for string |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( eregi_replace($pattern, $replacement, $value) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi_replace() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(1) "0" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(9) "new value" |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(13) "new value2345" |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(5) "-2345" |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(12) "new value0.5" |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(13) "-new value0.5" |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(28) "new value0new value234567000" |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(29) "new value.0765432new valueE-9" |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(3) "0.5" |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %seregi_replace_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace() expects parameter 3 to be string, array given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(9) "new value" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(9) "new value" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
Error: 2 - eregi_replace() expects parameter 3 to be string, object given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi_replace() is deprecated, %s(74) |
|||
string(0) "" |
|||
Done |
|||
@ -1,208 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : usage variations - unexpected type arg 1 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
|
|||
echo "*** Testing eregi() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$string = '1'; |
|||
$registers = array(1, 2); |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for pattern |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( eregi($value, $string, $registers) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(65) |
|||
Error: 8 - Undefined variable: unset_var, %s(68) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
int(1) |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %seregi_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %seregi_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %seregi_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %seregi_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %seregi_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 8 - Array to string conversion, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 2 - eregi(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 2 - eregi(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
int(1) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 2 - eregi(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
int(1) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 2 - eregi(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 2 - eregi(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 2 - eregi(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(74) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(75) |
|||
Error: 8 - Object of class stdClass to string conversion, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 2 - eregi(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(75) |
|||
Error: 2 - eregi(): REG_EMPTY, %s(75) |
|||
bool(false) |
|||
Done |
|||
@ -1,198 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : usage variations - unexpected type arg 2 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing eregi() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = '1'; |
|||
$registers = array(); |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for string |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( eregi($pattern, $value, $registers) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
Error: 8 - Array to string conversion, %seregi_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
Error: 2 - eregi() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %seregi_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
Error: 2 - eregi() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %seregi_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
Error: 2 - eregi() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %seregi_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
Error: 2 - eregi() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %seregi_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
Error: 2 - eregi() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
int(1) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
Error: 2 - eregi() expects parameter 2 to be string, object given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(74) |
|||
bool(false) |
|||
Done |
|||
@ -1,305 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : usage variations - unexpected type for arg 3 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing eregi() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = 'h(.*)lo!'; |
|||
$string = 'hello!'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// string data |
|||
"string", |
|||
'string', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for registers |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( eregi($pattern, $string, $value) ); |
|||
var_dump($value); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing eregi() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(61) |
|||
Error: 8 - Undefined variable: unset_var, %s(64) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value string |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value string |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(70) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function eregi() is deprecated, %s(71) |
|||
int(6) |
|||
array(2) { |
|||
[0]=> |
|||
string(6) "hello!" |
|||
[1]=> |
|||
string(2) "el" |
|||
} |
|||
Done |
|||
@ -1,19 +0,0 @@ |
|||
--TEST-- |
|||
Test eregi() function : usage variations - pass non-variable as arg 3, which is pass-by-ref. |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto int eregi(string pattern, string string [, array registers]) |
|||
* Description: Regular expression match |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
var_dump(eregi('l{2}', 'hello', str_repeat('x',1))); |
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Strict Standards: Only variables should be passed by reference in %s on line %d |
|||
|
|||
Deprecated: Function eregi() is deprecated in %s on line %d |
|||
int(2) |
|||
Done |
|||
@ -1,24 +0,0 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* POSIX regular expressions each coupled with a string that they match, |
|||
* based on documentation on http://www.tin.org/bin/man.cgi?section=7&topic=regex . |
|||
*/ |
|||
$expressions = array( |
|||
//array(pattern, string to match) |
|||
array('..(a|b|c)(a|b|c)..', '--- ab ---'), |
|||
array('()', ''), |
|||
array('()', 'abcdef'), |
|||
array('[x]|[^x]', 'abcdef'), |
|||
array('(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)', '--- aaa bbb ccc ddd ---'), |
|||
array('\\\\\`\^\.\[\$\(\)\|\*\+\?\{\\\'', '\\`^.[$()|*+?{\''), |
|||
array('\\a', 'a'), |
|||
array('[0-9][^0-9]', '2a'), |
|||
array('^[[:alnum:]]{62,62}$', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), |
|||
array('^[[:digit:]]{5}', '0123456789'), |
|||
array('[[:digit:]]{5}$', '0123456789'), |
|||
array('[[:blank:]]{1,10}', "\n \t"), |
|||
array('[[:print:]]{3}', " a "), |
|||
); |
|||
|
|||
?> |
|||
@ -1,155 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : basic functionality - test a number of simple split, specifying a limit |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: Split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple split, specifying a limit |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern,$string) = $re; |
|||
echo "\n--> Pattern: '$pattern'; match: '$string'\n"; |
|||
var_dump(split($pattern, $string . ' |1| ' . $string . ' |2| ' . $string, 2)); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : basic functionality *** |
|||
|
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; match: '--- ab ---' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(2) "--" |
|||
[1]=> |
|||
string(32) "-- |1| --- ab --- |2| --- ab ---" |
|||
} |
|||
|
|||
--> Pattern: '()'; match: '' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): Invalid Regular Expression in %s on line %d |
|||
bool(false) |
|||
|
|||
--> Pattern: '()'; match: 'abcdef' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): Invalid Regular Expression in %s on line %d |
|||
bool(false) |
|||
|
|||
--> Pattern: '[x]|[^x]'; match: 'abcdef' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(27) "bcdef |1| abcdef |2| abcdef" |
|||
} |
|||
|
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; match: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(4) "--- " |
|||
[1]=> |
|||
string(60) " --- |1| --- aaa bbb ccc ddd --- |2| --- aaa bbb ccc ddd ---" |
|||
} |
|||
|
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; match: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(38) " |1| \`^.[$()|*+?{' |2| \`^.[$()|*+?{'" |
|||
} |
|||
|
|||
--> Pattern: '\a'; match: 'a' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(12) " |1| a |2| a" |
|||
} |
|||
|
|||
--> Pattern: '[0-9][^0-9]'; match: '2a' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(14) " |1| 2a |2| 2a" |
|||
} |
|||
|
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; match: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(196) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |1| 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |2| 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
} |
|||
|
|||
--> Pattern: '^[[:digit:]]{5}'; match: '0123456789' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(35) "56789 |1| 0123456789 |2| 0123456789" |
|||
} |
|||
|
|||
--> Pattern: '[[:digit:]]{5}$'; match: '0123456789' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(35) "0123456789 |1| 0123456789 |2| 01234" |
|||
[1]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '[[:blank:]]{1,10}'; match: ' |
|||
' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(1) " |
|||
" |
|||
[1]=> |
|||
string(15) "|1| |
|||
|2| |
|||
" |
|||
} |
|||
|
|||
--> Pattern: '[[:print:]]{3}'; match: ' a ' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(16) " |1| a |2| a " |
|||
} |
|||
Done |
|||
@ -1,253 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : basic functionality - test a number of simple split, without specifying a limit |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: Split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple split, without specifying a limit |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern,$string) = $re; |
|||
echo "\n--> Pattern: '$pattern'; match: '$string'\n"; |
|||
var_dump(split($pattern, $string . ' |1| ' . $string . ' |2| ' . $string)); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : basic functionality *** |
|||
|
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; match: '--- ab ---' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(4) { |
|||
[0]=> |
|||
string(2) "--" |
|||
[1]=> |
|||
string(9) "-- |1| --" |
|||
[2]=> |
|||
string(9) "-- |2| --" |
|||
[3]=> |
|||
string(2) "--" |
|||
} |
|||
|
|||
--> Pattern: '()'; match: '' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): Invalid Regular Expression in %s on line %d |
|||
bool(false) |
|||
|
|||
--> Pattern: '()'; match: 'abcdef' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): Invalid Regular Expression in %s on line %d |
|||
bool(false) |
|||
|
|||
--> Pattern: '[x]|[^x]'; match: 'abcdef' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(29) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(0) "" |
|||
[2]=> |
|||
string(0) "" |
|||
[3]=> |
|||
string(0) "" |
|||
[4]=> |
|||
string(0) "" |
|||
[5]=> |
|||
string(0) "" |
|||
[6]=> |
|||
string(0) "" |
|||
[7]=> |
|||
string(0) "" |
|||
[8]=> |
|||
string(0) "" |
|||
[9]=> |
|||
string(0) "" |
|||
[10]=> |
|||
string(0) "" |
|||
[11]=> |
|||
string(0) "" |
|||
[12]=> |
|||
string(0) "" |
|||
[13]=> |
|||
string(0) "" |
|||
[14]=> |
|||
string(0) "" |
|||
[15]=> |
|||
string(0) "" |
|||
[16]=> |
|||
string(0) "" |
|||
[17]=> |
|||
string(0) "" |
|||
[18]=> |
|||
string(0) "" |
|||
[19]=> |
|||
string(0) "" |
|||
[20]=> |
|||
string(0) "" |
|||
[21]=> |
|||
string(0) "" |
|||
[22]=> |
|||
string(0) "" |
|||
[23]=> |
|||
string(0) "" |
|||
[24]=> |
|||
string(0) "" |
|||
[25]=> |
|||
string(0) "" |
|||
[26]=> |
|||
string(0) "" |
|||
[27]=> |
|||
string(0) "" |
|||
[28]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; match: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(4) { |
|||
[0]=> |
|||
string(4) "--- " |
|||
[1]=> |
|||
string(13) " --- |1| --- " |
|||
[2]=> |
|||
string(13) " --- |2| --- " |
|||
[3]=> |
|||
string(4) " ---" |
|||
} |
|||
|
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; match: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(4) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(5) " |1| " |
|||
[2]=> |
|||
string(5) " |2| " |
|||
[3]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '\a'; match: 'a' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(4) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(5) " |1| " |
|||
[2]=> |
|||
string(5) " |2| " |
|||
[3]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '[0-9][^0-9]'; match: '2a' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(6) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(2) " |" |
|||
[2]=> |
|||
string(1) " " |
|||
[3]=> |
|||
string(2) " |" |
|||
[4]=> |
|||
string(1) " " |
|||
[5]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; match: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(196) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |1| 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |2| 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
} |
|||
|
|||
--> Pattern: '^[[:digit:]]{5}'; match: '0123456789' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(3) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(0) "" |
|||
[2]=> |
|||
string(30) " |1| 0123456789 |2| 0123456789" |
|||
} |
|||
|
|||
--> Pattern: '[[:digit:]]{5}$'; match: '0123456789' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(35) "0123456789 |1| 0123456789 |2| 01234" |
|||
[1]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '[[:blank:]]{1,10}'; match: ' |
|||
' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(6) { |
|||
[0]=> |
|||
string(1) " |
|||
" |
|||
[1]=> |
|||
string(3) "|1|" |
|||
[2]=> |
|||
string(1) " |
|||
" |
|||
[3]=> |
|||
string(3) "|2|" |
|||
[4]=> |
|||
string(1) " |
|||
" |
|||
[5]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '[[:print:]]{3}'; match: ' a ' |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(7) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(0) "" |
|||
[2]=> |
|||
string(0) "" |
|||
[3]=> |
|||
string(0) "" |
|||
[4]=> |
|||
string(0) "" |
|||
[5]=> |
|||
string(0) "" |
|||
[6]=> |
|||
string(1) " " |
|||
} |
|||
Done |
|||
@ -1,59 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : basic functionality - a few non-matches |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
$replacement = 'r'; |
|||
|
|||
var_dump(split('A', '-- a --')); |
|||
var_dump(split('[A-Z]', '-- 0 --')); |
|||
var_dump(split('(a){4}', '--- aaa ---')); |
|||
var_dump(split('^a', '--- ba ---')); |
|||
var_dump(split('b$', '--- ba ---')); |
|||
var_dump(split('[:alpha:]', '--- x ---')); |
|||
|
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(7) "-- a --" |
|||
} |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(7) "-- 0 --" |
|||
} |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(11) "--- aaa ---" |
|||
} |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(10) "--- ba ---" |
|||
} |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(10) "--- ba ---" |
|||
} |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "--- x ---" |
|||
} |
|||
Done |
|||
@ -1,45 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : error conditions - wrong number of args |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: Split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
echo "*** Testing split() : error conditions - wrong number of args ***\n"; |
|||
|
|||
|
|||
//Test split with one more than the expected number of arguments |
|||
echo "\n-- Testing split() function with more than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
$string = 'string_val'; |
|||
$limit = 10; |
|||
$extra_arg = 10; |
|||
var_dump( split($pattern, $string, $limit, $extra_arg) ); |
|||
|
|||
// Testing split with one less than the expected number of arguments |
|||
echo "\n-- Testing split() function with less than expected no. of arguments --\n"; |
|||
$pattern = 'string_val'; |
|||
var_dump( split($pattern) ); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing split() : error conditions - wrong number of args *** |
|||
|
|||
-- Testing split() function with more than expected no. of arguments -- |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split() expects at most 3 parameters, 4 given in %s on line %d |
|||
NULL |
|||
|
|||
-- Testing split() function with less than expected no. of arguments -- |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split() expects at least 2 parameters, 1 given in %s on line %d |
|||
NULL |
|||
Done |
|||
@ -1,118 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : error conditions - test bad regular expressions |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: Split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test bad regular expressions |
|||
*/ |
|||
|
|||
echo "*** Testing split() : error conditions ***\n"; |
|||
|
|||
$regs = 'original'; |
|||
|
|||
var_dump(split("", "hello")); |
|||
var_dump(split("c(d", "hello")); |
|||
var_dump(split("a[b", "hello")); |
|||
var_dump(split("c(d", "hello")); |
|||
var_dump(split("*", "hello")); |
|||
var_dump(split("+", "hello")); |
|||
var_dump(split("?", "hello")); |
|||
var_dump(split("(+?*)", "hello", $regs)); |
|||
var_dump(split("h{256}", "hello")); |
|||
var_dump(split("h|", "hello")); |
|||
var_dump(split("h{0}", "hello")); |
|||
var_dump(split("h{2,1}", "hello")); |
|||
var_dump(split('[a-c-e]', 'd')); |
|||
var_dump(split('\\', 'x')); |
|||
var_dump(split('([9-0])', '1', $regs)); |
|||
|
|||
//ensure $regs unchanged |
|||
var_dump($regs); |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing split() : error conditions *** |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_EBRACK in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_EPAREN in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_BADRPT in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split() expects parameter 3 to be long, string given in %s on line %d |
|||
NULL |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_EMPTY in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_BADBR in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_ERANGE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split(): REG_EESCAPE in %s on line %d |
|||
bool(false) |
|||
|
|||
Deprecated: Function split() is deprecated in %s on line %d |
|||
|
|||
Warning: split() expects parameter 3 to be long, string given in %s on line %d |
|||
NULL |
|||
string(8) "original" |
|||
Done |
|||
@ -1,257 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : usage variations - unexpected type for arg 1 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: Split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing split() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$string = '1 a 1 Array 1 c '; |
|||
$limit = 5; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for pattern |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( split($value, $string, $limit) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing split() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(16) "1 a 1 Array 1 c " |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(4) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(3) " a " |
|||
[2]=> |
|||
string(7) " Array " |
|||
[3]=> |
|||
string(3) " c " |
|||
} |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(16) "1 a 1 Array 1 c " |
|||
} |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(16) "1 a 1 Array 1 c " |
|||
} |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(16) "1 a 1 Array 1 c " |
|||
} |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(16) "1 a 1 Array 1 c " |
|||
} |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(16) "1 a 1 Array 1 c " |
|||
} |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(16) "1 a 1 Array 1 c " |
|||
} |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(16) "1 a 1 Array 1 c " |
|||
} |
|||
Error: 8 - Array to string conversion, %ssplit_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 1 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 1 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 1 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 1 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_001.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 1 to be string, array given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(4) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(3) " a " |
|||
[2]=> |
|||
string(7) " Array " |
|||
[3]=> |
|||
string(3) " c " |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(4) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(3) " a " |
|||
[2]=> |
|||
string(7) " Array " |
|||
[3]=> |
|||
string(3) " c " |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 1 to be string, object given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split(): REG_EMPTY, %s(74) |
|||
bool(false) |
|||
Done |
|||
@ -1,257 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : usage variations - unexpected type for arg 2 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: Split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
|
|||
echo "*** Testing split() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = 'r|j|E'; |
|||
$limit = 5; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// int data |
|||
0, |
|||
1, |
|||
12345, |
|||
-2345, |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.1234567e10, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
$undefined_var, |
|||
|
|||
// unset data |
|||
$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for string |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( split($pattern, $value, $limit) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing split() : usage variations *** |
|||
Error: 8 - Undefined variable: undefined_var, %s(64) |
|||
Error: 8 - Undefined variable: unset_var, %s(67) |
|||
|
|||
Arg value 0 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "0" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "1" |
|||
} |
|||
|
|||
Arg value 12345 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(5) "12345" |
|||
} |
|||
|
|||
Arg value -2345 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(5) "-2345" |
|||
} |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(4) "10.5" |
|||
} |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(5) "-10.5" |
|||
} |
|||
|
|||
Arg value 101234567000 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(12) "101234567000" |
|||
} |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(2) { |
|||
[0]=> |
|||
string(10) "1.07654321" |
|||
[1]=> |
|||
string(2) "-9" |
|||
} |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(3) "0.5" |
|||
} |
|||
Error: 8 - Array to string conversion, %ssplit_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_002.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 2 to be string, array given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "1" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "1" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(0) "" |
|||
} |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(73) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
Error: 2 - split() expects parameter 2 to be string, object given, %s(74) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(74) |
|||
array(1) { |
|||
[0]=> |
|||
string(0) "" |
|||
} |
|||
Done |
|||
@ -1,231 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : usage variations - unexpected type for arg 3 |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: Split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
if (error_reporting() != 0) { |
|||
// report non-silenced errors |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
echo "*** Testing split() : usage variations ***\n"; |
|||
|
|||
// Initialise function arguments not being substituted (if any) |
|||
$pattern = b'[[:space:]]'; |
|||
$string = '1 2 3 4 5'; |
|||
|
|||
//get an unset variable |
|||
$unset_var = 10; |
|||
unset ($unset_var); |
|||
|
|||
//array of values to iterate over |
|||
$values = array( |
|||
|
|||
// float data |
|||
10.5, |
|||
-10.5, |
|||
10.7654321E-10, |
|||
.5, |
|||
|
|||
// array data |
|||
array(), |
|||
array(0), |
|||
array(1), |
|||
array(1, 2), |
|||
array('color' => 'red', 'item' => 'pen'), |
|||
|
|||
// null data |
|||
NULL, |
|||
null, |
|||
|
|||
// boolean data |
|||
true, |
|||
false, |
|||
TRUE, |
|||
FALSE, |
|||
|
|||
// empty data |
|||
"", |
|||
'', |
|||
|
|||
// string data |
|||
"string", |
|||
'string', |
|||
|
|||
// object data |
|||
new stdclass(), |
|||
|
|||
// undefined data |
|||
@$undefined_var, |
|||
|
|||
// unset data |
|||
@$unset_var, |
|||
); |
|||
|
|||
// loop through each element of the array for limit |
|||
|
|||
foreach($values as $value) { |
|||
echo "\nArg value $value \n"; |
|||
var_dump( split($pattern, $string, $value) ); |
|||
}; |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing split() : usage variations *** |
|||
|
|||
Arg value 10.5 |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(5) { |
|||
[0]=> |
|||
string(1) "1" |
|||
[1]=> |
|||
string(1) "2" |
|||
[2]=> |
|||
string(1) "3" |
|||
[3]=> |
|||
string(1) "4" |
|||
[4]=> |
|||
string(1) "5" |
|||
} |
|||
|
|||
Arg value -10.5 |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value 1.07654321E-9 |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value 0.5 |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
Error: 8 - Array to string conversion, %ssplit_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, array given, %s(73) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, array given, %s(73) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, array given, %s(73) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, array given, %s(73) |
|||
NULL |
|||
Error: 8 - Array to string conversion, %ssplit_variation_003.php(%d) |
|||
|
|||
Arg value Array |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, array given, %s(73) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value 1 |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, string given, %s(73) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, string given, %s(73) |
|||
NULL |
|||
|
|||
Arg value string |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, string given, %s(73) |
|||
NULL |
|||
|
|||
Arg value string |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, string given, %s(73) |
|||
NULL |
|||
Error: 4096 - Object of class stdClass could not be converted to string, %s(72) |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
Error: 2 - split() expects parameter 3 to be long, object given, %s(73) |
|||
NULL |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
|
|||
Arg value |
|||
Error: 8192 - Function split() is deprecated, %s(73) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
Done |
|||
@ -1,37 +0,0 @@ |
|||
--TEST-- |
|||
Test split() function : usage variations - out-of-range values for limit |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array split(string pattern, string string [, int limit]) |
|||
* Description: Split string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { |
|||
echo "Error: $err_no - $err_msg, $filename($linenum)\n"; |
|||
} |
|||
set_error_handler('test_error_handler'); |
|||
echo "*** Testing split() : usage variations ***\n"; |
|||
|
|||
$pattern = '[[:space:]]'; |
|||
$string = '1 2 3 4 5'; |
|||
var_dump(split($pattern, $string, 0)); |
|||
var_dump(split($pattern, $string, -10)); |
|||
|
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing split() : usage variations *** |
|||
Error: 8192 - Function split() is deprecated, %s(16) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
Error: 8192 - Function split() is deprecated, %s(17) |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "1 2 3 4 5" |
|||
} |
|||
Done |
|||
@ -1,155 +0,0 @@ |
|||
--TEST-- |
|||
Test spliti() function : basic functionality - test a number of simple spliti, specifying a limit |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array spliti(string pattern, string string [, int limit]) |
|||
* Description: spliti string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple spliti, specifying a limit |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern,$string) = $re; |
|||
echo "\n--> Pattern: '$pattern'; match: '$string'\n"; |
|||
var_dump(spliti($pattern, $string . ' |1| ' . $string . ' |2| ' . $string, 2)); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : basic functionality *** |
|||
|
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; match: '--- ab ---' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(2) "--" |
|||
[1]=> |
|||
string(32) "-- |1| --- ab --- |2| --- ab ---" |
|||
} |
|||
|
|||
--> Pattern: '()'; match: '' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
|
|||
Warning: spliti(): Invalid Regular Expression in %s on line %d |
|||
bool(false) |
|||
|
|||
--> Pattern: '()'; match: 'abcdef' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
|
|||
Warning: spliti(): Invalid Regular Expression in %s on line %d |
|||
bool(false) |
|||
|
|||
--> Pattern: '[x]|[^x]'; match: 'abcdef' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(27) "bcdef |1| abcdef |2| abcdef" |
|||
} |
|||
|
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; match: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(4) "--- " |
|||
[1]=> |
|||
string(60) " --- |1| --- aaa bbb ccc ddd --- |2| --- aaa bbb ccc ddd ---" |
|||
} |
|||
|
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; match: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(38) " |1| \`^.[$()|*+?{' |2| \`^.[$()|*+?{'" |
|||
} |
|||
|
|||
--> Pattern: '\a'; match: 'a' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(12) " |1| a |2| a" |
|||
} |
|||
|
|||
--> Pattern: '[0-9][^0-9]'; match: '2a' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(14) " |1| 2a |2| 2a" |
|||
} |
|||
|
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; match: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(196) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |1| 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |2| 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
} |
|||
|
|||
--> Pattern: '^[[:digit:]]{5}'; match: '0123456789' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(35) "56789 |1| 0123456789 |2| 0123456789" |
|||
} |
|||
|
|||
--> Pattern: '[[:digit:]]{5}$'; match: '0123456789' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(35) "0123456789 |1| 0123456789 |2| 01234" |
|||
[1]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '[[:blank:]]{1,10}'; match: ' |
|||
' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(1) " |
|||
" |
|||
[1]=> |
|||
string(15) "|1| |
|||
|2| |
|||
" |
|||
} |
|||
|
|||
--> Pattern: '[[:print:]]{3}'; match: ' a ' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(16) " |1| a |2| a " |
|||
} |
|||
Done |
|||
@ -1,253 +0,0 @@ |
|||
--TEST-- |
|||
Test spliti() function : basic functionality - test a number of simple spliti, without specifying a limit |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array spliti(string pattern, string string [, int limit]) |
|||
* Description: spliti string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
/* |
|||
* Test a number of simple spliti, without specifying a limit |
|||
*/ |
|||
|
|||
echo "*** Testing ereg() : basic functionality ***\n"; |
|||
|
|||
include(dirname(__FILE__) . '/regular_expressions.inc'); |
|||
|
|||
foreach ($expressions as $re) { |
|||
list($pattern,$string) = $re; |
|||
echo "\n--> Pattern: '$pattern'; match: '$string'\n"; |
|||
var_dump(spliti($pattern, $string . ' |1| ' . $string . ' |2| ' . $string)); |
|||
} |
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
*** Testing ereg() : basic functionality *** |
|||
|
|||
--> Pattern: '..(a|b|c)(a|b|c)..'; match: '--- ab ---' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(4) { |
|||
[0]=> |
|||
string(2) "--" |
|||
[1]=> |
|||
string(9) "-- |1| --" |
|||
[2]=> |
|||
string(9) "-- |2| --" |
|||
[3]=> |
|||
string(2) "--" |
|||
} |
|||
|
|||
--> Pattern: '()'; match: '' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
|
|||
Warning: spliti(): Invalid Regular Expression in %s on line %d |
|||
bool(false) |
|||
|
|||
--> Pattern: '()'; match: 'abcdef' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
|
|||
Warning: spliti(): Invalid Regular Expression in %s on line %d |
|||
bool(false) |
|||
|
|||
--> Pattern: '[x]|[^x]'; match: 'abcdef' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(29) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(0) "" |
|||
[2]=> |
|||
string(0) "" |
|||
[3]=> |
|||
string(0) "" |
|||
[4]=> |
|||
string(0) "" |
|||
[5]=> |
|||
string(0) "" |
|||
[6]=> |
|||
string(0) "" |
|||
[7]=> |
|||
string(0) "" |
|||
[8]=> |
|||
string(0) "" |
|||
[9]=> |
|||
string(0) "" |
|||
[10]=> |
|||
string(0) "" |
|||
[11]=> |
|||
string(0) "" |
|||
[12]=> |
|||
string(0) "" |
|||
[13]=> |
|||
string(0) "" |
|||
[14]=> |
|||
string(0) "" |
|||
[15]=> |
|||
string(0) "" |
|||
[16]=> |
|||
string(0) "" |
|||
[17]=> |
|||
string(0) "" |
|||
[18]=> |
|||
string(0) "" |
|||
[19]=> |
|||
string(0) "" |
|||
[20]=> |
|||
string(0) "" |
|||
[21]=> |
|||
string(0) "" |
|||
[22]=> |
|||
string(0) "" |
|||
[23]=> |
|||
string(0) "" |
|||
[24]=> |
|||
string(0) "" |
|||
[25]=> |
|||
string(0) "" |
|||
[26]=> |
|||
string(0) "" |
|||
[27]=> |
|||
string(0) "" |
|||
[28]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '(a{1})(a{1,}) (b{1,3}) (c+) (d?ddd|e)'; match: '--- aaa bbb ccc ddd ---' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(4) { |
|||
[0]=> |
|||
string(4) "--- " |
|||
[1]=> |
|||
string(13) " --- |1| --- " |
|||
[2]=> |
|||
string(13) " --- |2| --- " |
|||
[3]=> |
|||
string(4) " ---" |
|||
} |
|||
|
|||
--> Pattern: '\\\`\^\.\[\$\(\)\|\*\+\?\{\''; match: '\`^.[$()|*+?{'' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(4) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(5) " |1| " |
|||
[2]=> |
|||
string(5) " |2| " |
|||
[3]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '\a'; match: 'a' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(4) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(5) " |1| " |
|||
[2]=> |
|||
string(5) " |2| " |
|||
[3]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '[0-9][^0-9]'; match: '2a' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(6) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(2) " |" |
|||
[2]=> |
|||
string(1) " " |
|||
[3]=> |
|||
string(2) " |" |
|||
[4]=> |
|||
string(1) " " |
|||
[5]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '^[[:alnum:]]{62,62}$'; match: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(196) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |1| 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |2| 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
} |
|||
|
|||
--> Pattern: '^[[:digit:]]{5}'; match: '0123456789' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(3) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(0) "" |
|||
[2]=> |
|||
string(30) " |1| 0123456789 |2| 0123456789" |
|||
} |
|||
|
|||
--> Pattern: '[[:digit:]]{5}$'; match: '0123456789' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(2) { |
|||
[0]=> |
|||
string(35) "0123456789 |1| 0123456789 |2| 01234" |
|||
[1]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '[[:blank:]]{1,10}'; match: ' |
|||
' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(6) { |
|||
[0]=> |
|||
string(1) " |
|||
" |
|||
[1]=> |
|||
string(3) "|1|" |
|||
[2]=> |
|||
string(1) " |
|||
" |
|||
[3]=> |
|||
string(3) "|2|" |
|||
[4]=> |
|||
string(1) " |
|||
" |
|||
[5]=> |
|||
string(0) "" |
|||
} |
|||
|
|||
--> Pattern: '[[:print:]]{3}'; match: ' a ' |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(7) { |
|||
[0]=> |
|||
string(0) "" |
|||
[1]=> |
|||
string(0) "" |
|||
[2]=> |
|||
string(0) "" |
|||
[3]=> |
|||
string(0) "" |
|||
[4]=> |
|||
string(0) "" |
|||
[5]=> |
|||
string(0) "" |
|||
[6]=> |
|||
string(1) " " |
|||
} |
|||
Done |
|||
@ -1,52 +0,0 @@ |
|||
--TEST-- |
|||
Test spliti() function : basic functionality - a few non-matches |
|||
--FILE-- |
|||
<?php |
|||
/* Prototype : proto array spliti(string pattern, string string [, int limit]) |
|||
* Description: spliti string into array by regular expression |
|||
* Source code: ext/standard/reg.c |
|||
* Alias to functions: |
|||
*/ |
|||
|
|||
$replacement = 'r'; |
|||
|
|||
var_dump(spliti('[A-Z]', '-- 0 --')); |
|||
var_dump(spliti('(a){4}', '--- aaa ---')); |
|||
var_dump(spliti('^a', '--- ba ---')); |
|||
var_dump(spliti('b$', '--- ba ---')); |
|||
var_dump(spliti('[:alpha:]', '--- x ---')); |
|||
|
|||
|
|||
echo "Done"; |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(7) "-- 0 --" |
|||
} |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(11) "--- aaa ---" |
|||
} |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(10) "--- ba ---" |
|||
} |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(10) "--- ba ---" |
|||
} |
|||
|
|||
Deprecated: Function spliti() is deprecated in %s on line %d |
|||
array(1) { |
|||
[0]=> |
|||
string(9) "--- x ---" |
|||
} |
|||
Done |
|||
Some files were not shown because too many files changed in this diff
Write
Preview
Loading…
Cancel
Save
Reference in new issue