我正在尝试创建一个正则表达式,它会删除所有不以某个前缀开头的行。使用this tip我想出了这个:
(?:(?!\nLAST-MODIFIED:[^\n]+\n).*)
这似乎无法正常工作。我究竟做错了什么?是的,我知道这将始终剥离第一行,无论它是否以LAST-MODIFIED:
为前缀。但我很肯定第一行永远不会是LAST-MODIFIED:
行,所以它应该是安全的。如果我想要完全安全的话,我建议的解决方案是(?:(?!(\n|^)LAST-MODIFIED:[^\n]+\n).*)
。
答案 0 :(得分:4)
这会做你需要的吗?
(^(?!LAST-MODIFIED)[^\n]*)+
说明:
^
- 匹配行的开头(?!LAST-MODIFIED)
- 检查它是否以上次修改后的[^\n]*
- 如果上述情况属实,则匹配所有内容,直至找到换行符+
- 重复答案 1 :(得分:0)
编辑: - 哎呀,你想要的行不能以某个前缀开头。请参阅下面的编辑:
如果这不是通过多行检测内容,您可以使用grep:
轻松地执行此操作grep -v -P "^LAST-MODIFIED:.*" oldfile > newfile
我建议将其换成新文件并进行检查,然后使用mv newfile oldfile
将新文件移到旧文件上,而不是直接更改文件,以避免可能丢失数据。
答案 2 :(得分:0)
我不确定您使用的语言是什么,但在.NET / C#中这可行(已测试):
Regex r = new Regex(@"^(LAST-MODIFIED\:).*$");
Debug.WriteLine(r.Replace("LAST-MODIFIED:2012-01-01", ""));
^匹配行的开头,$匹配结束 句点/点“。”匹配除linebreak以外的任何字符的零次或多次出现