我尝试删除文本文件中的一些文本。
文本文件是这样的:
#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~';
但是我没有找到方法。
最佳答案
如果你想删除#monfiltre*
到#FIN
之间的部分,你可以使用这个表达式:
echo preg_replace('/^#monfiltreperso$.+?^#FIN$[\r\n]*/ms', '', $str);
它使用多行模式 /m
以便您可以匹配 ^
(行首)和 $
(行尾) .要跨多行匹配,您需要点匹配所有模式 /s
;否则它将匹配到每一行的末尾。
一组可选的换行符也被匹配,以防止空行出现在最终结果中。
如果你愿意,你可以让它动态化:
$filter = preg_quote('perso3', '/');
echo preg_replace('/^#monfiltre' . $filter . '$.+?^#FIN$[\r\n]*/ms', '', $str);
关于php - 使用php从文本文件中删除文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16519168/