_regex = $regex; $this->setMode($mode); $this->setFlags($flags); $this->setPregFlags($pregFlags); $this->replacement = null; return; } /** * Get accept status. * * @return bool */ public function accept() { if (is_array(parent::current())) { return false; } $this->_key = parent::key(); $this->_current = parent::current(); $matches = []; $useKey = $this->_flags & self::USE_KEY; $subject = $useKey ? $this->_key : $this->_current; $out = false; switch ($this->_mode) { case self::MATCH: $out = 0 !== preg_match( $this->_regex, $subject, $matches, $this->_pregFlags ); break; case self::GET_MATCH: $this->_current = []; $out = 0 !== preg_match( $this->_regex, $subject, $this->_current, $this->_pregFlags ); break; case self::ALL_MATCHES: $this->_current = []; $out = 0 < preg_match_all( $this->_regex, $subject, $this->_current, $this->_pregFlags ); break; case self::SPLIT: $this->_current = preg_split( $this->_regex, $subject, null, $this->_pregFlags ); $out = is_array($this->_current) && 1 < count($this->_current); break; case self::REPLACE: $numberOfReplacement = 0; $result = preg_replace( $this->_regex, $this->replacement, $subject, -1, $numberOfReplacement ); if (null === $result || 0 === $numberOfReplacement) { $out = false; break; } if (0 !== $useKey) { $this->_key = $result; $out = true; break; } $this->_current = $result; $out = true; break; default: $out = false; break; } if (0 !== ($this->_flags & self::INVERT_MATCH)) { return false === $out; } return $out; } /** * Get current key. * * @return int */ public function key() { return $this->_key; } /** * Get current value. * * @return string */ public function current() { return $this->_current; } /** * Set mode. * * @param int $mode Mode. * @return void */ public function setMode($mode) { if ($mode < self::MATCH || $mode > self::REPLACE) { throw new \InvalidArgumentException( 'Illegal mode ' . $mode . '.' ); } $this->_mode = $mode; return; } /** * Set flags. * * @param int $flags Flags. * @return void */ public function setFlags($flags) { $this->_flags = $flags; return; } /** * Set preg flags. * * @param int $pregFlags Preg flags. * @return void */ public function setPregFlags($pregFlags) { $this->_pregFlags = $pregFlags; return; } /** * Get regular expression. * * @return string */ public function getRegex() { return $this->_regex; } /** * Get mode. * * @return int */ public function getMode() { return $this->_mode; } /** * Get flags. * * @return int */ public function getFlags() { return $this->_flags; } /** * Get preg flags. * * @return int */ public function getPregFlags() { return $this->_pregFlags; } }