रेगुलर एक्सप्रेशन
$directory = new RecursiveDirectoryIterator(__DIR__); $flattened = new RecursiveIteratorIterator($directory); // Make sure the path does not contain "/.Trash*" folders and ends eith a .php or .html file $files = new RegexIterator($flattened, '#^(?:[A-Z]:)?(?:/(?!\.Trash)[^/]+)+/[^/]+\.(?:php|html)$#Di'); foreach($files as $file) { echo $file . PHP_EOL; }
फ़िल्टर का उपयोग करना
एक बेस क्लास में रेगेक्स होता है जिसे फ़िल्टर के साथ उपयोग करने की आवश्यकता होती है।
कक्षाएं जो इसका विस्तार करेंगी। RecursiveRegexIterator विस्तारित है।
abstract class FilesystemRegexFilter extends RecursiveRegexIterator { protected $regex; public function __construct(RecursiveIterator $it, $regex) { $this->regex = $regex; parent::__construct($it, $regex); } }
वे मूल फ़िल्टर हैं और क्रमशः फ़ाइल और निर्देशिका नाम के साथ काम करते हैं।
class FilenameFilter extends FilesystemRegexFilter { // Filter files with the help of regex public function accept() { return ( ! $this->isFile() || preg_match($this->regex, $this->getFilename())); } } class DirnameFilter extends FilesystemRegexFilter { // Filter directories with the help of regex public function accept() { return ( ! $this->isDir() || preg_match($this->regex, $this->getFilename())); } }
नीचे दिया गया कोड निर्देशिका सामग्री पर पुनरावर्ती रूप से पुनरावृत्त होता है। ट्रैश फ़ोल्डरों को फ़िल्टर कर दिया जाता है और केवल PHP और HTML फ़ाइलें रखी जाती हैं।
$directory = new RecursiveDirectoryIterator(__DIR__); // Filter out ".Trash*" folders $filter = new DirnameFilter($directory, '/^(?!\.Trash)/'); // Filter PHP/HTML files $filter = new FilenameFilter($filter, '/\.(?:php|html)$/'); foreach(new RecursiveIteratorIterator($filter) as $file) { echo $file . PHP_EOL; }
उपरोक्त कोड का उपयोग करके 2 स्तरों तक गहराई से स्कैन करना
$files = new RecursiveIteratorIterator($filter); $files->setMaxDepth(1); // Two levels, the parameter is zero-based. foreach($files as $file) { echo $file . PHP_EOL; }