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>