编程语言
首页 > 编程语言> > 用PHP删除文本形式的文本文件

用PHP删除文本形式的文本文件

作者:互联网

我尝试删除文本文件中的一些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);

所以我可以删除这一行:

06002

但是有#FIN未被删除.

我有 :

06003

我需要更改此规则:

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

但是我没有找到方法.

解决方法:

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

标签:file-get-contents,text-files,preg-replace,php,regex
来源: https://codeday.me/bug/20191030/1971523.html