Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

จะใช้ RegexIterator ใน PHP ได้อย่างไร?


นิพจน์ทั่วไป

$directory =new RecursiveDirectoryIterator(__DIR__);$flattened =new RecursiveIteratorIterator($directory);// ตรวจสอบให้แน่ใจว่าเส้นทางไม่มีโฟลเดอร์ "/.Trash*" และสิ้นสุดด้วย .php หรือ .html file$files =ใหม่ RegexIterator($flattened, '#^(?:[A-Z]:)?(?:/(?!\.Trash)[^/]+)+/[^/]+\.(?:php| html)$#Di');foreach($files as $file) { echo $file . PHP_EOL;}

การใช้ฟิลเตอร์

คลาสฐานมี regex ที่ต้องใช้กับตัวกรอง

ชั้นเรียนที่จะขยายนี้ RecursiveRegexIterator ถูกขยาย

<ก่อนหน้า>คลาสนามธรรม FilesystemRegexFilter ขยาย RecursiveRegexIterator { ป้องกัน $ regex; ฟังก์ชันสาธารณะ __construct (RecursiveIterator $it, $regex) { $this->regex =$regex; ผู้ปกครอง ::__construct($it, $regex); }}

เป็นตัวกรองพื้นฐานและทำงานกับชื่อไฟล์และไดเรกทอรีตามลำดับ

คลาส FilenameFilter ขยาย FilesystemRegexFilter { // กรองไฟล์ด้วยความช่วยเหลือของฟังก์ชันสาธารณะ regex ที่ accept() { return ( ! $this->isFile() || preg_match($this->regex, $this->getFilename() )); }} คลาส DirnameFilter ขยาย FilesystemRegexFilter { // กรองไดเรกทอรีด้วยความช่วยเหลือของฟังก์ชันสาธารณะ regex ยอมรับ () { return ( ! $this->isDir() || preg_match($this->regex, $this->getFilename()) ); }}

โค้ดด้านล่างวนซ้ำในเนื้อหาของไดเร็กทอรี โฟลเดอร์ถังขยะจะถูกกรองออกและจะเก็บเฉพาะไฟล์ PHP และ HTML

$directory =new RecursiveDirectoryIterator(__DIR__);// กรองโฟลเดอร์ ".Trash*" ออก$filter =new DirnameFilter($directory, '/^(?!\.Trash)/');// Filter PHP/ ไฟล์ HTML$filter =new FilenameFilter($filter, '/\.(?:php|html)$/');foreach(new RecursiveIteratorIterator($filter) as $file) { echo $file . PHP_EOL;}

สแกนได้ลึกถึง 2 ระดับโดยใช้โค้ดด้านบน

$files =ใหม่ RecursiveIteratorIterator($filter);$files->setMaxDepth(1); // สองระดับ พารามิเตอร์เป็น zero-based.foreach($files as $file) { echo $file PHP_EOL;}