2013-05-13 32 views
3

我嘗試刪除文本文件中的一些文本文件。用php刪除文本表單文本文件

的texte文件是這樣的:

#MESSAGE 
:0 
* ^(To|cc).*fd.* 
|/usr/bin/vacation fd 
#monfiltreperso 
:0 
* ^From.*[email protected] 
Maildir/.repertorymoi 
#FIN 
#monfiltreperso2 
:0 
* ^Subject:.*monsujet2 
Maildir/.repertorymoi2 
#FIN 
#monfiltreperso3 
:0 
* ^From.*[email protected] 
Maildir/.repertorymoi2 
#FIN 

我嘗試刪除#monfiltre ...#monfiltre之間的界限...

我有這樣的:

$pattern = '~'.'#filtre'.$nom.'\s*\n^#monfiltre~'; 
$filecontent = preg_replace($pattern, '', $filecontent); 

所以我可以刪除這一行:

#monfiltreperso 
:0 
* ^From.*[email protected] 
Maildir/.repertorymoi 

但有#FIN沒有被刪除。

,我有:

#MESSAGE 
:0 
* ^(To|cc).*fd.* 
|/usr/bin/vacation fd 
#FIN (need to be deleted) 
:0 
* ^Subject:.*monsujet2 
Maildir/.repertorymoi2 
#FIN 

我需要改變這個規則:

$pattern = '~'.'#filtre'.$nom.'\s*\n^#monfiltre~'; 

但我怎麼沒發現。

+2

添加['s'標識符(http://www.php.net/manual/en/reference.pcre。 pattern.modifiers.php)可能會有所幫助。 – Passerby 2013-05-13 09:59:24

回答

2

直到#FIN,您可以使用此表達式:

echo preg_replace('/^#monfiltreperso$.+?^#FIN$[\r\n]*/ms', '', $str); 

它使用多模式/m,這樣就可以對陣^(行首)和$(行尾)。要匹配多行,您需要點匹配模式/s;否則它將匹配到每行結束。

一組可選的換行字符匹配以及防止空行出現在最終結果。

Expression visualization

你可以,如果你想讓它動態:

$filter = preg_quote('perso3', '/'); 
echo preg_replace('/^#monfiltre' . $filter . '$.+?^#FIN$[\r\n]*/ms', '', $str); 
+0

感謝您花時間回答:) – mpgn 2013-07-09 14:09:11

2

你可以試試這個:

$pattern = '~#monfiltreperso\s*\n\K.+?(?=#monfiltreperso2)~s'; 
echo preg_replace($pattern, '', $texte); 

,或者如果你#monfiltreperso2之前肯定不會有任何#,你可以這樣做:如果你想刪除#monfiltre*之間的部分

$pattern = '~#monfiltreperso\s*\n\K[^#]++~'; 
+0

是的,它的工作,但**#monfiltreperso **不是刪除。無論我使用另一個preg_replace刪除**#monfiltreperso **。 Thx @ casimir-et-hippolyte! – mpgn 2013-05-13 11:22:34

+1

@MartialE:好的!要做到這一點,只要刪除'\ K' – 2013-05-13 11:56:39

+0

是的,我只是罰款的解決方案,當你張貼^^ Thx再次,你讓我的一天! :) – mpgn 2013-05-13 12:04:05