用php删除文本表单textfile
我试图删除文本文件中的一些文本 文本文件如下所示:用php删除文本表单textfile,php,regex,preg-replace,text-files,file-get-contents,Php,Regex,Preg Replace,Text Files,File Get Contents,我试图删除文本文件中的一些文本 文本文件如下所示: #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
#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
我尝试删除#monfilter…和#monfilter…之间的行
我有这个:
$pattern = '~'.'#filtre'.$nom.'\s*\n^#monfiltre~';
$filecontent = preg_replace($pattern, '', $filecontent);
所以我可以删除这一行:
但是有一个未被删除的FIN
我有:
我需要更改此规则:
$pattern = '~'.'#filtre'.$nom.'\s*\n^#monfiltre~';
但是我没有找到方法。您可以尝试以下方法:
$pattern = '~#monfiltreperso\s*\n\K.+?(?=#monfiltreperso2)~s';
echo preg_replace($pattern, '', $texte);
或者,如果您确定没有任何#before#monfilterSO2
,您可以使用以下方法:
$pattern = '~#monfiltreperso\s*\n\K[^#]++~';
如果要删除
#monfilter*
到#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);
添加可能会有所帮助。是的,这是工作,但并不意味着删除。无论我用另一个preg_替换来移除什么,Monfilter都是如此。Thx@casimir和hippolyte@好的!要做到这一点,只需删除
\K
是的,当你再次发布^^Thx时,我只需调整解决方案,你让我开心!:)我编辑了我的主题,你能看到吗,我的问题有点复杂@卡西米尔和希波莱特
echo preg_replace('/^#monfiltreperso$.+?^#FIN$[\r\n]*/ms', '', $str);
$filter = preg_quote('perso3', '/');
echo preg_replace('/^#monfiltre' . $filter . '$.+?^#FIN$[\r\n]*/ms', '', $str);