Preg_match yardım: bir klasördeki dosyaları seçip

2 Cevap

Ben bir klasörün bütün farklı şablon dosyalarını seçer aşağıdaki kodu var ... Ben dosya adları şunlardır:

template_default.php

template_default_load.php

template_sub.php

template_sub_load.php

Ben sadece bu yüzden bu kodu kullanılan dosya adı _load olmadan olanları seçmek istiyorum:

preg_match('/^template_(.*)[^[_load]]{0}\.php$/i', $layout_file, $layout_name)

Bunun yerine ben $ layout_name echo varsayılan veya alt dönen [1], bu DEFAUL and Su gösterir ... sonuç off son karakteri keser dışında kod çalışıyor ...

Herhangi bir fikir benim koduyla yanlış?

2 Cevap

Bu bölüm tamamen dere kalmıştır:

[^[_load]]{0}

Bu istediğiniz regex olduğunu:

/^template_(.*)(?<!_load)\.php$/i

You'll have to use negative assertions. (read below why not)

preg_match('/^template_(.*?)(?!_load)\.php$/i', $layout_file, $layout_name)

Edit: "_load" .*? bölümü tarafından tüketilen olacak çünkü bunu düşünmek gelmek, bu regexp Aslında işe yaramaz. Benim tavsiyem: _load, örneğin ile sona olanlar atlamak için kullanabilirsiniz, adını yakalamak için () preg_match kullanmayın

foreach (glob('template_*') as $filepath)
{
    if (preg_match('#_load\\.php$', $filepath))
    {
        // The file ends with _load
    }
    $filename = basename($filepath);
    $layout_name = substr($filename, strlen('template_'));
}