mirror of
https://github.com/php/php-src.git
synced 2024-11-29 04:46:07 +08:00
- MFH Update RegexIterator, Docu & Tests
This commit is contained in:
parent
33a1a4d39a
commit
85963e6300
@ -29,9 +29,9 @@ class RegexIterator implements FilterIterator
|
|||||||
const REPLACE = 4; /**< Mode: Replace the input key or current */
|
const REPLACE = 4; /**< Mode: Replace the input key or current */
|
||||||
|
|
||||||
private $regex; /**< the regular expression to match against */
|
private $regex; /**< the regular expression to match against */
|
||||||
private $flags; /**< special flags (self::USE_KEY) */
|
|
||||||
private $mode; /**< operation mode (one of self::MATCH,
|
private $mode; /**< operation mode (one of self::MATCH,
|
||||||
self::GET_MATCH, self::ALL_MATCHES, self::SPLIT) */
|
self::GET_MATCH, self::ALL_MATCHES, self::SPLIT) */
|
||||||
|
private $flags; /**< special flags (self::USE_KEY) */
|
||||||
private $preg_flags;/**< PREG_* flags, see preg_match(), preg_match_all(),
|
private $preg_flags;/**< PREG_* flags, see preg_match(), preg_match_all(),
|
||||||
preg_split() */
|
preg_split() */
|
||||||
private $key; /**< the value used for key() */
|
private $key; /**< the value used for key() */
|
||||||
@ -116,6 +116,55 @@ class RegexIterator implements FilterIterator
|
|||||||
{
|
{
|
||||||
return $this->current;
|
return $this->current;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return current operation mode
|
||||||
|
*/
|
||||||
|
function getMode()
|
||||||
|
{
|
||||||
|
return $this->mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param mode new operaion mode
|
||||||
|
*/
|
||||||
|
function setMode($mode)
|
||||||
|
{
|
||||||
|
$this->mode = $mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return current operation flags
|
||||||
|
*/
|
||||||
|
function getFlags()
|
||||||
|
{
|
||||||
|
return $this->flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param flags new operaion flags
|
||||||
|
*/
|
||||||
|
function setFlags($flags)
|
||||||
|
{
|
||||||
|
$this->flags = $flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param mode new operaion mode
|
||||||
|
*/
|
||||||
|
function setMode($mode)
|
||||||
|
{
|
||||||
|
$this->mode = $mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return current PREG flags
|
||||||
|
*/
|
||||||
|
function getPregFlags()
|
||||||
|
{
|
||||||
|
return $this->preg_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param flags new PREG flags
|
||||||
|
*/
|
||||||
|
function setPregFlags($preg_flags)
|
||||||
|
{
|
||||||
|
$this->preg_flags = $preg_flags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
@ -1459,6 +1459,85 @@ SPL_METHOD(RegexIterator, accept)
|
|||||||
}
|
}
|
||||||
} /* }}} */
|
} /* }}} */
|
||||||
|
|
||||||
|
/* {{{ proto bool RegexIterator::getMode()
|
||||||
|
Returns current operation mode */
|
||||||
|
SPL_METHOD(RegexIterator, getMode)
|
||||||
|
{
|
||||||
|
spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||||
|
|
||||||
|
RETURN_LONG(intern->u.regex.mode);
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
|
/* {{{ proto bool RegexIterator::setMode(int new_mode)
|
||||||
|
Set new operation mode */
|
||||||
|
SPL_METHOD(RegexIterator, setMode)
|
||||||
|
{
|
||||||
|
spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||||
|
long mode;
|
||||||
|
|
||||||
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &mode) == FAILURE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode < 0 || mode >= REGIT_MODE_MAX) {
|
||||||
|
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Illegal mode %ld", mode);
|
||||||
|
return;// NULL
|
||||||
|
}
|
||||||
|
|
||||||
|
intern->u.regex.mode = mode;
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
|
/* {{{ proto bool RegexIterator::getFlags()
|
||||||
|
Returns current operation flags */
|
||||||
|
SPL_METHOD(RegexIterator, getFlags)
|
||||||
|
{
|
||||||
|
spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||||
|
|
||||||
|
RETURN_LONG(intern->u.regex.flags);
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
|
/* {{{ proto bool RegexIterator::setFlags(int new_flags)
|
||||||
|
Set operation flags */
|
||||||
|
SPL_METHOD(RegexIterator, setFlags)
|
||||||
|
{
|
||||||
|
spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||||
|
long flags;
|
||||||
|
|
||||||
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &flags) == FAILURE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
intern->u.regex.flags = flags;
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
|
/* {{{ proto bool RegexIterator::getFlags()
|
||||||
|
Returns current PREG flags (if in use or NULL) */
|
||||||
|
SPL_METHOD(RegexIterator, getPregFlags)
|
||||||
|
{
|
||||||
|
spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||||
|
|
||||||
|
if (intern->u.regex.use_flags) {
|
||||||
|
RETURN_LONG(intern->u.regex.preg_flags);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
|
/* {{{ proto bool RegexIterator::setFlags(int new_flags)
|
||||||
|
Set PREG flags */
|
||||||
|
SPL_METHOD(RegexIterator, setPregFlags)
|
||||||
|
{
|
||||||
|
spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||||
|
long preg_flags;
|
||||||
|
|
||||||
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &preg_flags) == FAILURE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
intern->u.regex.preg_flags = preg_flags;
|
||||||
|
intern->u.regex.use_flags = 1;
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
/* {{{ proto void RecursiveRegexIterator::__construct(RecursiveIterator it, string regex [, int mode [, int flags [, int preg_flags]]])
|
/* {{{ proto void RecursiveRegexIterator::__construct(RecursiveIterator it, string regex [, int mode [, int flags [, int preg_flags]]])
|
||||||
Create an RecursiveRegexIterator from another recursive iterator and a regular expression */
|
Create an RecursiveRegexIterator from another recursive iterator and a regular expression */
|
||||||
SPL_METHOD(RecursiveRegexIterator, __construct)
|
SPL_METHOD(RecursiveRegexIterator, __construct)
|
||||||
@ -1604,9 +1683,30 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it___construct, 0, 0, 2)
|
|||||||
ZEND_ARG_INFO(0, preg_flags)
|
ZEND_ARG_INFO(0, preg_flags)
|
||||||
ZEND_END_ARG_INFO();
|
ZEND_END_ARG_INFO();
|
||||||
|
|
||||||
|
static
|
||||||
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_mode, 0, 0, 1)
|
||||||
|
ZEND_ARG_INFO(0, mode)
|
||||||
|
ZEND_END_ARG_INFO();
|
||||||
|
|
||||||
|
static
|
||||||
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_flags, 0, 0, 1)
|
||||||
|
ZEND_ARG_INFO(0, flags)
|
||||||
|
ZEND_END_ARG_INFO();
|
||||||
|
|
||||||
|
static
|
||||||
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_preg_flags, 0, 0, 1)
|
||||||
|
ZEND_ARG_INFO(0, preg_flags)
|
||||||
|
ZEND_END_ARG_INFO();
|
||||||
|
|
||||||
static zend_function_entry spl_funcs_RegexIterator[] = {
|
static zend_function_entry spl_funcs_RegexIterator[] = {
|
||||||
SPL_ME(RegexIterator, __construct, arginfo_regex_it___construct, ZEND_ACC_PUBLIC)
|
SPL_ME(RegexIterator, __construct, arginfo_regex_it___construct, ZEND_ACC_PUBLIC)
|
||||||
SPL_ME(RegexIterator, accept, NULL, ZEND_ACC_PUBLIC)
|
SPL_ME(RegexIterator, accept, NULL, ZEND_ACC_PUBLIC)
|
||||||
|
SPL_ME(RegexIterator, getMode, NULL, ZEND_ACC_PUBLIC)
|
||||||
|
SPL_ME(RegexIterator, setMode, arginfo_regex_it_set_mode, ZEND_ACC_PUBLIC)
|
||||||
|
SPL_ME(RegexIterator, getFlags, NULL, ZEND_ACC_PUBLIC)
|
||||||
|
SPL_ME(RegexIterator, setFlags, arginfo_regex_it_set_flags, ZEND_ACC_PUBLIC)
|
||||||
|
SPL_ME(RegexIterator, getPregFlags, NULL, ZEND_ACC_PUBLIC)
|
||||||
|
SPL_ME(RegexIterator, setPregFlags, arginfo_regex_it_set_preg_flags, ZEND_ACC_PUBLIC)
|
||||||
{NULL, NULL, NULL}
|
{NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ foreach(new RegexIterator(new ArrayIterator($ar), "/2/") as $k => $v)
|
|||||||
===KEY===
|
===KEY===
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
foreach(new RegexIterator(new ArrayIterator($ar), "/2/", RegexIterator::USE_KEY) as $k => $v)
|
foreach(new RegexIterator(new ArrayIterator($ar), "/2/", 0, RegexIterator::USE_KEY) as $k => $v)
|
||||||
{
|
{
|
||||||
echo "$k=>$v\n";
|
echo "$k=>$v\n";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user