使用php从文本文件中删除文本

时间:2013-05-13 09:50:01

标签: php regex preg-replace text-files file-get-contents

我尝试删除文本文件中的一些文本。

texte文件是这样的:

#MESSAGE
:0
* ^(To|cc).*fd.*
|/usr/bin/vacation fd
#monfiltreperso
:0
* ^From.*martial@gironde.com
Maildir/.repertorymoi
#FIN
#monfiltreperso2
:0
* ^Subject:.*monsujet2
Maildir/.repertorymoi2
#FIN
#monfiltreperso3
:0
* ^From.*martial2@gironde.com
Maildir/.repertorymoi2
#FIN

我尝试删除 #monfiltre ... #monfiltre ...

之间的界限

我有这个:

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

所以我可以删除这一行:

#monfiltreperso
:0
* ^From.*martial@gironde.com
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 个答案:

答案 0 :(得分:2)

你可以试试这个:

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

或者如果你确定在#monfiltreperso2之前没有#,你可以使用它:

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

答案 1 :(得分:2)

如果要删除#monfiltre*#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);