我需要尝试在文本文件中删除与以下模式匹配的行:
anything SEARCHTEXT;anything;anything
其中SEARCHTEXT将始终为静态值,每行以换行符结束。有人可以帮助这个regext吗?或者给我一些关于从哪里开始的想法(自从我查看正则表达式以来已经很多年了。)
我打算为此使用PHP的preg_replace()。
感谢。
答案 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
标志使插入符号(^
)与每行的开头匹配,而不是字符串的开头。