2010-03-26 75 views
0

我有一堆以某種標準格式命名的文件。標準形式基本上是這樣的:多次調用preg_replace改變結果

[整數] _word1_word2_word3_ ... _wordn一個單詞真的可以是任何東西,但所有的單詞之間用下劃線分隔。

實在是隻有3個東西,我想做的文字:

1)我要修改的整數,它總是在一開始,讓類似「200」將成爲$ 200.00 。 2.用「with」替換「with」,「With」,「w /」或「W /」形式的任何「單詞」。

3.)用空格替換所有下劃線。

我寫了三個不同的preg_replace調用來完成這個技巧。它們分別是:

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

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

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

每次更換後工作正常單獨運行時,但是當所有的三個運行時,第二次更換被忽略。爲什麼會發生這樣的事情?

感謝您的幫助!

更新:

下面是實際的代碼我的工作:如果第一個替換刪除一些文字,第二更換比賽可能發生

$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

工作正常,我。你可以發佈一些更多的代碼,以及不起作用的文本示例嗎? – 2010-03-26 22:24:08

回答

2

類似的東西。但我不認爲這是發生在這裏的事情。我認爲你在第二次換人時只是出錯。它看起來像你缺少的/

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

這種變化之後,它似乎很好地工作:

$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); 

結果:

 
$ 200.00 word1 with word2 
+0

我實際上注意到,我認爲「w /」實際上只是沒有斜線的「w」。這就是爲什麼它在...之前工作的原因,但是在我複製並粘貼代碼並刪除了「\ /」後,它就起作用了!我不知道爲什麼。 – objectivesea 2010-03-26 22:45:42