我尝试删除文本文件中的一些文本。
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~';
但我没有找到。
答案 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
;否则它将匹配,直到每行结束。
还会匹配一组可选的换行符,以防止在最终结果中出现空行。
如果您愿意,可以将其设为动态:
$filter = preg_quote('perso3', '/');
echo preg_replace('/^#monfiltre' . $filter . '$.+?^#FIN$[\r\n]*/ms', '', $str);