PHP dosyası preg_match sınıf adı

4 Cevap php

Ben ardışık bir dizin php dosyalarını sınıf isimlerini çekerek, ve bir dizi bu sınıfların isimleri saklamak tarar bir komut dosyası var. Bu bile oldukça büyük Zend Framework kütüphane klasörleri ile güzel çalışıyor.

Sorun, diğer sınıfları uzatmak sınıflar diziye dahil olmamak olmasıdır.

İşte benim şimdiki preg_match olduğunu:

if (preg_match("/class\s*(\w*)\s*\{/i",strip_comments(file_get_contents($file)),$matches)) $classes[] = $matches[1];

Ben son \ s * doğru olmadığını biliyoruz; yakalamak orada birşey olmalı "{" veya "Some_Other_Class {uzanır".

4 Cevap

Deneyin:

/^class ([a-zA-Z0-9_]+)/
'/class[\s\n]+([a-zA-Z0-9_]+)[\s\na-zA-Z0-9_]+\{/'

Uzatmak veya uygulamak sınıflarını destekler, çünkü bu daha iyi çalışır.

Örnek:

class blah implements base 
{

maç olacak.

Sizin model sadece class anahtar kelime ve açılan parantez {[arasında tek bir kelime arar mevcut desen aksine sınıf adı olmak class anahtar sözcüğü izleyen ilk kelimeyi almalıdır (2)]}. Sınırlayıcı ve böylece desen maç olmaz arasında sadece tek bir kelime yok çünkü sınıf başka uzanır Bu problemlidir.

İşte denemek için bir model bulunuyor:

/^\s*class\s+([a-zA-Z0-9_]+)/

Ben dahil yolunda bu foreach php dosyasını kullanarak sona erdi:

$handle = @fopen($path.'/'.$dir, "r");
                    $stop=false;
                    if ($handle)
                    {
                        while (!$stop&&!feof($handle))
                        {
                            $line = fgets($handle, 4096);
                            $matches=array();
                            if (preg_match('#^(\s*)((?:(?:abstract|final|static)\s+)*)class\s+'.$input.'([-a-zA-Z0-9_]+)(?:\s+extends\s+([-a-zA-Z0-9_]+))?(?:\s+implements\s+([-a-zA-Z0-9_,\s]+))?#',$line,$matches)) 
                            {
                                $stop=true;
                                $classes[]=$matches[3];
                            }
                        }
                        fclose($handle);
                    }

Oldukça iyi iş gibi görünüyor. Benzer bir şey yapar, bir başka Coda Plugin buldum. Sadece yakalamak bazen askıda gibi görünüyor olmasıdır. Bu bir hata var ya da sadece yavaş olmakla emin değilim.