Bir dize başında ve sonunda bir karakter çıkarmak için Düzenli İfade?

4 Cevap php

Diyelim ki şöyle bir dize var diyelim:

$file = 'widget-widget-newsletter.php';

Ben öneki widget- kaldırmak ve .php ekini kaldırmak için preg_replace () kullanmak istiyorum. Bütün bu elde etmek için bir normal ifadeyi kullanmak mümkün mü?

Sonuç dizesi olmalıdır widget-newsletter.

4 Cevap

Yerine orta ayıklanması gibi, uçları kapalı sıyırma olarak düşünmek etmeyin:

$file = 'widget-widget-newsletter.php';
if (preg_match('/^widget\-(.+)\.php$/i', $file, $matches))
    echo "filename is " . $matches[1][0];

"-Widget" ve ". Php" tamamen statik ve her zaman orada olacak eğer Tabii ki, sadece kullanabilirsiniz substr:

echo "filename is " . substr($file, 7, -4);

Bu çok daha hızlı olurdu ama bunu çöp geçerseniz, çöp geri alırsınız.

$name = preg_replace(array('%^widget-%', '%-%', '%\.php$%'), array('','_',''), $file);

bunu yapmak gerekir.

Ya da daha genel (önek varsayarak ilk - gider ve eki son başlar .):

$name = preg_replacearray('%^.*?-%', '%-%', '%\.(?!.*?\.).*?$%'), array('','_',''), $file);

Eğer desen bir dizi ve işlevine değiştirmeleri dizisi verirseniz, o zaman her bir model yerine göre yerini alır.

Update:

Eğer _ ile - değiştirmek için gereksinim çıkarıldı olarak, substr() gerçekten de daha uygundur:

$name = substr($file, 7, -4);

Yedek parametre the manual açıklaması Gönderen:

Dize veya yerine dizeleri ile bir dizi. Bu parametre bir dize ve desen parametresi bir dizidir, tüm desenler bu dize ile değiştirilecektir.

Eğer desen parametresi için içinde önek ve sonek desenleri ile bir dizi kullanmak ve sadece yedek olarak boş bir dize koymak olabilir gibi geliyor.