Annotation of embedaddon/php/ext/spl/internal/regexiterator.inc, revision 1.1.1.2

1.1       misho       1: <?php
                      2: 
                      3: /** @file regexiterator.inc
                      4:  * @ingroup SPL
                      5:  * @brief class RegexIterator
                      6:  * @author  Marcus Boerger
                      7:  * @date    2003 - 2009
                      8:  *
                      9:  * SPL - Standard PHP Library
                     10:  */
                     11: 
                     12: /**
                     13:  * @brief   Regular expression filter for iterators
                     14:  * @author  Marcus Boerger
                     15:  * @version 1.0
                     16:  * @since PHP 5.1
                     17:  *
                     18:  * This filter iterator assumes that the inner iterator 
                     19:  */
                     20: class RegexIterator extends FilterIterator
                     21: {
                     22:        const USE_KEY     = 0x00000001; /**< If present in $flags the key is 
                     23:                                             used rather then the current value. */
                     24: 
                     25:        const MATCH       = 0; /**< Mode: Executed a plain match only      */
                     26:        const GET_MATCH   = 1; /**< Mode: Return the first matche (if any) */
                     27:        const ALL_MATCHES = 2; /**< Mode: Return all matches (if any)      */
                     28:        const SPLIT       = 3; /**< Mode: Return the split values (if any) */
                     29:        const REPLACE     = 4; /**< Mode: Replace the input key or current */
                     30:        
                     31:        private $regex;     /**< the regular expression to match against */
                     32:        private $mode;      /**< operation mode (one of self::MATCH, 
                     33:                                 self::GET_MATCH, self::ALL_MATCHES, self::SPLIT) */
                     34:        private $flags;     /**< special flags (self::USE_KEY) */
                     35:        private $preg_flags;/**< PREG_* flags, see preg_match(), preg_match_all(), 
                     36:                                 preg_split() */ 
                     37:        private $key;       /**< the value used for key() */
                     38:        private $current;   /**< the value used for current() */
                     39: 
                     40:        /**
                     41:         * Constructs a regular expression filter around an iterator whose 
                     42:         * elemnts or keys are strings.
                     43:         *
                     44:         * @param it          inner iterator
                     45:         * @param regex       the regular expression to match
                     46:         * @param mode        operation mode (one of self::MATCH, self::GET_MATCH, 
                     47:         *                    self::ALL_MATCHES, self::SPLIT)
                     48:         * @param flags       special flags (self::USE_KEY)
                     49:         * @param preg_flags  global PREG_* flags, see preg_match(), 
                     50:         *                    preg_match_all(), preg_split()
                     51:         */
                     52:        function __construct(Iterator $it, $regex, $mode = 0, $flags = 0, $preg_flags = 0) {
                     53:                parent::__construct($it);
                     54:                $this->regex = $regex;
                     55:                $this->flags = $flags;
                     56:                $this->mode = $mode;
                     57:                $this->preg_flags = $preg_flags;
                     58:        }
                     59: 
                     60:        /**
                     61:         * Match current or key against regular expression using mode, flags and
                     62:         * preg_flags.
                     63:         *
                     64:         * @return whether this is a match
                     65:         *
                     66:         * @warning never call this twice for the same state
                     67:         */
                     68:        function accept()
                     69:        {
                     70:                $matches       = array();
                     71:                $this->key     = parent::key();
                     72:                $this->current = parent::current();
                     73:                /* note that we use $this->current, rather than calling parent::current() */
                     74:                $subject = ($this->flags & self::USE_KEY) ? $this->key : $this->current;
                     75:                switch($this->mode)
                     76:                {
                     77:                        case self::MATCH:
                     78:                                return preg_match($this->regex, $subject, $matches, $this->preg_flags);
                     79: 
                     80:                        case self::GET_MATCH:
                     81:                                $this->current = array();
                     82:                                return preg_match($this->regex, $subject, $this->current, $this->preg_flags) > 0;
                     83: 
                     84:                        case self::ALL_MATCHES:
                     85:                                $this->current = array();
                     86:                                return preg_match_all($this->regex, $subject, $this->current, $this->preg_flags) > 0;
                     87: 
                     88:                        case self::SPLIT:
                     89:                                $this->current = array();
                     90:                                preg_split($this->regex, $subject, $this->current, $this->preg_flags) > 1;
                     91: 
                     92:                        case self::REPLACE:
                     93:                                $this->current = array();
                     94:                                $result = preg_replace($this->regex, $this->replacement, $subject);
                     95:                                if ($this->flags & self::USE_KEY)
                     96:                                {
                     97:                                        $this->key = $result;
                     98:                                }
                     99:                                else
                    100:                                {
                    101:                                        $this->current = $result;
                    102:                                }
                    103:                }
                    104:        }
                    105: 
                    106:        /** @return the key after accept has been called
                    107:         */
                    108:        function key()
                    109:        {
                    110:                return $this->key;
                    111:        }
                    112: 
                    113:        /** @return the current value after accept has been called
                    114:         */
                    115:        function current()
                    116:        {
                    117:                return $this->current;
                    118:        }
                    119: 
                    120:        /** @return current operation mode
                    121:         */
                    122:        function getMode()
                    123:        {
                    124:                return $this->mode;
                    125:        }
                    126: 
                    127:        /** @param mode new operaion mode
                    128:         */
                    129:        function setMode($mode)
                    130:        {
                    131:                $this->mode = $mode;
                    132:        }
                    133: 
                    134:        /** @return current operation flags
                    135:         */
                    136:        function getFlags()
                    137:        {
                    138:                return $this->flags;
                    139:        }
                    140: 
                    141:        /** @param flags new operaion flags
                    142:         */
                    143:        function setFlags($flags)
                    144:        {
                    145:                $this->flags = $flags;
                    146:        }
                    147: 
                    148:        /** @return current PREG flags
                    149:         */
                    150:        function getPregFlags()
                    151:        {
                    152:                return $this->preg_flags;
                    153:        }
                    154: 
                    155:        /** @param preg_flags new PREG flags
                    156:         */
                    157:        function setPregFlags($preg_flags)
                    158:        {
                    159:                $this->preg_flags = $preg_flags;
                    160:        }
1.1.1.2 ! misho     161: 
        !           162:        /** @return current regular expression
        !           163:        */
        !           164:        function getRegex()
        !           165:        {
        !           166:                return $this->regex;
        !           167:        }
1.1       misho     168: }
                    169: 
                    170: ?>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>