Değiştirir sonuç preg_replace için birden fazla çağrı

1 Cevap php

Ben biraz standart bir biçimde adlandırılmıştır dosyaları bir grup var. Standart form temelde şudur:

[Tamsayı] _word1_word2_word3_ ... _wordn bir kelime gerçekten bir şey olabilir nerede, ancak tüm kelimeleri bir çizgi ile ayrılır.

Ben metne yapmak istediğim sadece 3 şey gerçekten var:

1..) I "200" gibi bir şey $ 200,00 olacak ki, başında her zaman tamsayı, değiştirmek istediğiniz.

2.) "Ile" ile herhangi bir "ile" "ile" form "kelime", "w /" veya "W /" değiştirin.

3..) Bir boşluk ile tüm çizgi değiştirin.

Ben hile yapmak için üç farklı preg_replace aramaları yazdı. Bunlar aşağıdaki gibidir:

1). $filename = preg_replace("/(^[0-9]+)/","$ $1.00",$filename)

2). $filename = preg_replace("/_([wW]|[wW]ith)_/"," with ",$filename)

3). $filename = preg_replace("/_/"," ",$filename);

Her değiştirme ayrı ayrı çalıştırdığınızda beklendiği gibi çalışır, ancak her üç çalıştırdığınızda, 2 yedek göz ardı edilir. Neden böyle bir şey meydana istiyorsunuz?

Yardımın için teşekkürler!

Güncelleme:

İşte ben çalışıyorum gerçek kodu:

$path = "./img";
$dir_handle = @opendir($path);
while ($file = readdir($dir_handle)) {
    if ($file != "." && $file != "..") {
        $id = preg_replace("/\.jpg/","",$file);
        $id = preg_replace("/(^[0-9]+)/","$ $1.00", $id);
        $id = preg_replace("/_([wW]\/|[wW]ith)_/"," with ", $id);
        $id = preg_replace("/_/"," ", $id);
        echo "<a href='javascript:show(\"img/$file\")'>$id</a> <br/>";
    }
}
closedir($dir_handle);

1 Cevap

Birinci yedek ikinci maçları üzerinde yerini bazı metni kaldırır eğer böyle bir şey meydana gelebilir. Ama o burada neler olduğunu sanmıyorum. Ben sadece ikinci yedek bir hata olduğunu düşünüyorum. Bu eksik gibi görünüyor /:

$filename = preg_replace("/_([wW]\/|[wW]ith)_/"," with ", $filename);

Bu değişiklikten sonra iyi iş gibi görünüyor:

$filename = "200_word1_w/_word2";
$filename = preg_replace("/(^[0-9]+)/","$ $1.00", $filename);
$filename = preg_replace("/_([wW]\/|[wW]ith)_/"," with ", $filename);
$filename = preg_replace("/_/"," ", $filename);
print_r($filename);

Sonuç:

$ 200.00 word1 with word2