我正在尝试创建一个正则表达式来删除所有不以某个前缀开头的行。使用这个技巧我想出了这个:
(?:(?!\nLAST-MODIFIED:[^\n]+\n).*)
这似乎无法正常工作。我究竟做错了什么?是的,我知道这总是会删除第一行,无论它是否带有前缀LAST-MODIFIED:
。但我很肯定第一条线永远不会是一条LAST-MODIFIED:
线,所以它应该是安全的。(?:(?!(\n|^)LAST-MODIFIED:[^\n]+\n).*)
如果我想完全安全,我建议的解决方法是。
这会做你需要的吗?
(^(?!LAST-MODIFIED)[^\n]*)+
解释:
^
- 匹配一行的开头(?!LAST-MODIFIED)
- 检查它不是以 last-modified 开头[^\n]*
- 如果上述情况属实,则匹配所有内容,直到找到换行符+
- 重复编辑:- 哎呀,你想要的行不以某个前缀开头。请参阅下面的编辑:
如果这没有检测到多行内容,您可以使用 grep 从 shell 轻松执行此操作:
grep -v -P "^LAST-MODIFIED:.*" oldfile > newfile
我建议将它导入一个新文件并检查它,然后将新文件移动到旧文件上,mv newfile oldfile
而不是直接更改文件,以避免可能丢失数据。
我不确定您使用的是哪种语言,但在 .NET/C# 中可以使用(经过测试):
Regex r = new Regex(@"^(LAST-MODIFIED\:).*$");
Debug.WriteLine(r.Replace("LAST-MODIFIED:2012-01-01", ""));
^ 匹配行首,$ 匹配行尾句点/点“.” 匹配零次或多次出现的除换行符以外的任何字符