php - 使用php从文本文件中删除文本

标签 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.*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;否则它将匹配到每一行的末尾。

一组可选的换行符也被匹配,以防止空行出现在最终结果中。

Expression visualization

如果你愿意,你可以让它动态化:

$filter = preg_quote('perso3', '/');
echo preg_replace('/^#monfiltre' . $filter . '$.+?^#FIN$[\r\n]*/ms', '', $str);

关于php - 使用php从文本文件中删除文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16519168/

相关文章:

c++ - Boost::Regex 段错误(我认为)

php - 删除除换行符、回车符、制表符和空格之外的所有控制和非打印字符

php - 向 WooCommerce 产品变体添加后缀会被覆盖

php - 搜索存储为整数的部分 IP 地址

php - 如何从数据库中获取在特定日期和时间段内未分配的用户列表

c# - 从表达式中获取负数

如果查询字符串等于值,php添加到数据库

regex - 尝试构建一个正则表达式来检查模式

php - Preg 使用回调替换图像 src

PHP 如何删除少于 6 个字符的行