1<?php
2
3/** @file recursiveregexiterator.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   Recursive 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 */
20class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator
21{
22	/**
23	 * Constructs a regular expression filter around an iterator whose
24	 * elemnts or keys are strings.
25	 *
26	 * @param it          inner iterator
27	 * @param regex       the regular expression to match
28	 * @param mode        operation mode (one of self::MATCH, self::GET_MATCH,
29	 *                    self::ALL_MATCHES, self::SPLIT)
30	 * @param flags       special flags (self::USE_KEY)
31	 * @param preg_flags  global PREG_* flags, see preg_match(),
32	 *                    preg_match_all(), preg_split()
33	 */
34	function __construct(RecursiveIterator $it, $regex, $mode = 0, $flags = 0, $preg_flags = 0) {
35		parent::__construct($it, $regex, $mode, $flags, $preg_flags);
36	}
37
38	/** @return whether the current element has children
39	 */
40	function hasChildren()
41	{
42		return $this->getInnerIterator()->hasChildren();
43	}
44
45	/** @return an iterator for the current elements children
46	 *
47	 * @note the returned iterator will be of the same class as $this
48	 */
49	function getChildren()
50	{
51		if (empty($this->ref))
52		{
53			$this->ref = new ReflectionClass($this);
54		}
55		return $this->ref->newInstance($this->getInnerIterator()->getChildren());
56	}
57
58	private $ref;
59}
60
61?>