正则表达式从文本文件中删除一些行

时间:2011-04-15 14:25:34

标签: php regex

我需要尝试在文本文件中删除与以下模式匹配的行:

anything SEARCHTEXT;anything;anything

其中SEARCHTEXT将始终为静态值,每行以换行符结束。有人可以帮助这个regext吗?或者给我一些关于从哪里开始的想法(自从我查看正则表达式以来已经很多年了。)

我打算为此使用PHP的preg_replace()。

感谢。

2 个答案:

答案 0 :(得分:5)

此解决方案会删除$text中包含子字符串SEARCHTEXT的所有行:

$text = preg_replace('/^.*?SEARCHTEXT.*\n?/m', '', $text);

我的基准测试表明此解决方案比'/\n?.*SEARCHTEXT.*$/m'快10倍以上(并且这个正确处理第一行匹配而第二行不匹配的情况)。

答案 1 :(得分:2)

使用正则表达式匹配整行,如下所示:

^.*SEARCHTEXT.*$

preg_replace将是一个很好的选择。

$str = preg_replace('/\n?.*SEARCHTEXT.*$/m', '', $str);

\n转义符合匹配行的换行符。这样就可以删除匹配的行,并且替换方法不会在字符串中留下空行。

/m标志使插入符号(^)与每行的开头匹配,而不是字符串的开头。