From: Adam Harvey Date: Thu, 6 Jan 2011 02:32:02 +0000 (+0000) Subject: Implement request #53659 (Implementing RegexIterator::getRegex() method). Patch X-Git-Tag: php-5.4.0alpha1~191^2~413 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3571c955b5cf646f2117afce28769d6ca1dcc619;p=php Implement request #53659 (Implementing RegexIterator::getRegex() method). Patch by Joshua Thijssen. --- diff --git a/NEWS b/NEWS index 6f63542f97..c8d186dd61 100644 --- a/NEWS +++ b/NEWS @@ -182,6 +182,7 @@ PHP NEWS either is present at compile time. (Rasmus) - Improved SPL extension: + . Added RegexIterator::getRegex() method. (Joshua Thijssen) . Added SplObjectStorage::getHash() hook. (Etienne) . Added SplFileInfo::getExtension(). FR #48767. (Peter Cowburn) diff --git a/UPGRADING b/UPGRADING index 8787b4018f..b590324764 100755 --- a/UPGRADING +++ b/UPGRADING @@ -353,6 +353,9 @@ UPGRADE NOTES - PHP X.Y - ReflectionClass::getTraitAliases() - ReflectionParameter::canBePassedByValue() + - RegexIterator + - RegexIterator::getRegex() + - PDO_dblib - PDO::newRowset() diff --git a/ext/spl/internal/regexiterator.inc b/ext/spl/internal/regexiterator.inc index 8b4ffe9dad..4eef7ddcf5 100755 --- a/ext/spl/internal/regexiterator.inc +++ b/ext/spl/internal/regexiterator.inc @@ -158,6 +158,13 @@ class RegexIterator extends FilterIterator { $this->preg_flags = $preg_flags; } + + /** @return current regular expression + */ + function getRegex() + { + return $this->regex; + } } ?> diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index c10f59f7e0..e2ad8f3b2c 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -1465,6 +1465,7 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z } intern->u.regex.mode = mode; intern->u.regex.regex = estrndup(regex, regex_len); + intern->u.regex.regex_len = regex_len; intern->u.regex.pce = pcre_get_compiled_regex_cache(regex, regex_len TSRMLS_CC); if (intern->u.regex.pce == NULL) { /* pcre_get_compiled_regex_cache has already sent error */ @@ -1941,6 +1942,19 @@ SPL_METHOD(RegexIterator, accept) } } /* }}} */ +/* {{{ proto string RegexIterator::getRegex() + Returns current regular expression */ +SPL_METHOD(RegexIterator, getRegex) +{ + spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + RETURN_STRINGL(intern->u.regex.regex, intern->u.regex.regex_len, 1); +} /* }}} */ + /* {{{ proto bool RegexIterator::getMode() Returns current operation mode */ SPL_METHOD(RegexIterator, getMode) @@ -2205,6 +2219,7 @@ static const zend_function_entry spl_funcs_RegexIterator[] = { SPL_ME(RegexIterator, setFlags, arginfo_regex_it_set_flags, ZEND_ACC_PUBLIC) SPL_ME(RegexIterator, getPregFlags, arginfo_recursive_it_void, ZEND_ACC_PUBLIC) SPL_ME(RegexIterator, setPregFlags, arginfo_regex_it_set_preg_flags, ZEND_ACC_PUBLIC) + SPL_ME(RegexIterator, getRegex, arginfo_recursive_it_void, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; diff --git a/ext/spl/spl_iterators.h b/ext/spl/spl_iterators.h index d9f57d8b78..ef59fcc6ea 100755 --- a/ext/spl/spl_iterators.h +++ b/ext/spl/spl_iterators.h @@ -154,6 +154,7 @@ typedef struct _spl_dual_it_object { long preg_flags; pcre_cache_entry *pce; char *regex; + uint regex_len; } regex; #endif } u; diff --git a/ext/spl/tests/regexiterator_getregex.phpt b/ext/spl/tests/regexiterator_getregex.phpt new file mode 100644 index 0000000000..d3113a52ca --- /dev/null +++ b/ext/spl/tests/regexiterator_getregex.phpt @@ -0,0 +1,29 @@ +--TEST-- +SPL: RegexIterator::getRegex() basic tests +--CREDITS-- +Joshua Thijssen +--FILE-- +getRegex()); + +# Empty regular expression +$regexIterator = new RegexIterator($iterator, '//'); +var_dump($regexIterator->getRegex()); + +# "Complex" email regular expression +$regexIterator = new RegexIterator($iterator, '|\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b|'); +var_dump($regexIterator->getRegex()); + + + +?> +--EXPECT-- +string(5) "/.at/" +string(2) "//" +string(43) "|\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b|"