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

วิธีใช้ RegexIterator ใน PHP


นิพจน์ปกติ

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

ใช้ตัวกรอง

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

คลาสที่จะขยายคลาสนี้ 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 {    // กรองไฟล์ด้วย regex    public function accept() {       return ( ! $this->isFile() || preg_match($this->regex, $this->getFilename()));    } } class DirnameFilter extends FilesystemRegexFilter {    // กรองไดเรกทอรีด้วย regex    public function accept() {       return ( ! $this->isDir() || preg_match($this->regex, $this->getFilename()));    } }

โค้ดด้านล่างวนลูปแบบ recursive ผ่านเนื้อหาไดเรกทอรี กรองโฟลเดอร์ trash ออก และเก็บเฉพาะไฟล์ PHP และ HTML

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

สแกนลึกสูงสุด 2 ระดับด้วยโค้ดข้างต้น

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