2013-04-22 19 views
0

我嘗試刪除真空行。 我的劇本,搜索一行,刪除她,但它仍然是一個真空線。用PHP刪除text.txt中的真空/空行

hello 
dude 
world 

我做了這個腳本:

$chaine="dude"; 
$file=$filename; 
$texte = file_get_contents($file); 
$texte = str_replace($chaine ,'',$texte); 
$texte = preg_replace('/\s+/s', "\n", $texte); 

try 
    { 

     if(!$fd = fopen($filename, "w")){ 
      throw new Exception("Erreur ouverture du fichier"); 
     } 
    else 
    { 
     fwrite($fd, $texte); 

     /*On ferme le fichier*/ 
     fclose($fd);  
    } 

    } 

    catch (Exception $e) { 
     echo "Error de parametre fichier introuvable (File: ".$e->getFile().", line ". 
     $e->getLine()."): ".$e->getMessage(); 
     echo "\n"; 
    } 

而且我有

hello 
world 

但如果我刪除了第一個:您好,我有一個真空線:

(vacuum line) 
world 

我該如何解決這個問題?

我嘗試微調,str_replace函數,但它不工作...

+0

'$ texte = preg_replace('/ ^'。preg_quote($ chaine,'/')'['r\n]+ /','',$ texte);' – DaveRandom 2013-04-22 12:48:21

+0

只適用於第一行。如果$ chaine = world,則不起作用 – mpgn 2013-04-22 13:12:45

+0

將'[\ r \ n] +'更改爲'(?:[\ r \ n] + | $)' – DaveRandom 2013-04-22 13:16:33

回答

1

替換此:

$texte = str_replace($chaine ,'',$texte); 
$texte = preg_replace('/\s+/s', "\n", $texte); 

與此:

$texte = preg_replace('#' . $chaine . '\s*#', "\r", $texte); 

我不知道你的換行符看起來像,但嘗試使用「\ r」,「\ n」或「\ r \ n」作爲替換字符串。

+0

已編輯,請立即嘗試。 – silkfire 2013-04-22 13:09:57

+0

完美的作品!謝謝 ! :)有什麼用? '#'在行中? – mpgn 2013-04-22 13:16:19

+0

他們是正則表達式分隔符。你需要在你的正則表達式字符串的開始和結尾有它們;它可以是任何不尋常的字符,比如'''''''''''','''','',''''或'/'。 – silkfire 2013-04-22 13:22:30