Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php删除文本表单textfile_Php_Regex_Preg Replace_Text Files_File Get Contents - Fatal编程技术网

用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);