mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
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)
This commit is contained in:
parent
e699f654f0
commit
86de7963fe
122 changed files with 40 additions and 15068 deletions
|
@ -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
|
771
ext/ereg/ereg.c
771
ext/ereg/ereg.c
|
@ -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 ========= */
|
File diff suppressed because it is too large
Load diff
|
@ -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
|
File diff suppressed because it is too large
Load diff
|
@ -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 have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue