1. 正则表达式入门从零开始理解文本匹配魔法第一次接触正则表达式时我也被那些奇怪的符号组合搞得一头雾水。直到有次需要处理上千行的服务器日志手动操作差点让我崩溃这才硬着头皮学起了正则。现在回想起来正则表达式就像是一把瑞士军刀而Notepad就是它的刀鞘两者配合能解决90%的文本处理难题。正则表达式的核心在于模式匹配。举个例子\d{3}-\d{2}-\d{4}这个模式可以完美匹配123-45-6789这样的社保号码格式。其中的\d代表数字{3}表示重复三次连字符则是字面匹配。这种精确匹配能力在处理结构化文本时特别有用比如从杂乱的日志中提取特定格式的错误代码。Notepad实现正则匹配的方式很直观。打开查找对话框(CtrlF)勾选正则表达式选项输入你的模式就能立即看到匹配结果。我经常用^Error:来快速定位日志文件中的错误行开头的^符号确保只匹配行首出现的Error:避免误匹配到日志正文中的相同单词。2. 日志清洗实战从混乱到有序的蜕变上周处理Nginx访问日志时我遇到了典型的多行日志问题。原始日志包含时间戳、客户端IP、请求方法等冗余信息而我只需要提取特定的API调用记录。通过^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?(GET|POST) (/api/\w)这个模式成功提取出了IP、请求方法和API端点三要素。更复杂的场景是处理Java异常堆栈。用^\tat .\(.\.java:\d\)$可以快速定位所有堆栈跟踪行配合(?:Exception|Error):.*能同时捕获异常类型和消息。记得有次处理OutOfMemoryError就是用这个技巧在300MB的日志文件中10秒内定位到了所有内存溢出点。对于包含JSON片段的日志我开发了个实用技巧先用\{.*?\}匹配最短的完整JSON对象再用(\w):\s*([^]*)提取键值对。虽然不如专业JSON解析器严谨但对于快速排查问题已经足够。3. 代码重构利器批量修改的艺术最近重构遗留代码时正则表达式帮了大忙。需要将user.name这种属性访问统一改为getUser().getName()形式。解决方案是查找(\w)\.(\w)替换为get\1().get\2()。这里的关键是捕获组的运用\1和\2分别引用两个括号匹配的内容。SQL语句规范化是另一个典型案例。把SELECT * FROM users WHERE id ?这种参数化查询改为命名参数形式可以用\?匹配所有问号然后逐步替换为:param1等有意义的名称。配合Notepad的多次替换功能半小时就完成了200多个SQL语句的标准化。我还发现个很有用的技巧用(\/\/.*)|(\/\*[\s\S]*?\*\/)可以匹配所有注释这在需要临时移除注释进行代码分析时特别方便。记得替换前先备份文件避免不可逆的修改。4. 高级技巧从匹配到转换的飞跃日期格式转换是常见需求。最近把美国格式的MM/DD/YYYY转为国际标准YYYY-MM-DD使用(\d{2})\/(\d{2})\/(\d{4})匹配\3-\1-\2替换就搞定了。更复杂的时间戳转换如Jan 15, 2024 14:30到2024-01-15T14:30:00需要建立月份映射表配合正则使用。处理CSV文件时经常需要转义包含逗号的字段。模式(.*?)可以匹配引号内的内容然后用«$1»临时替换等处理完其他逗号后再换回来。这个技巧帮我解决了字段对齐和特殊字符处理的问题。对于多语言文本Unicode属性匹配非常实用。\p{Han}匹配所有中文字符\p{Arabic}匹配阿拉伯文这在处理国际化日志时能快速定位特定语言的记录。有次排查阿拉伯语用户的支付问题就是靠这个特性从混合日志中过滤出了相关条目。5. 避坑指南常见问题与解决方案刚开始用正则时我经常被贪婪匹配坑到。比如想匹配HTML标签之间的内容用div(.*)/div会一直匹配到最后一个/div。后来学会用div(.*?)/div非贪婪模式问题迎刃而解。记住在量词后加?就能开启非贪婪模式。另一个陷阱是特殊字符转义。有次匹配URL中的点号直接写.结果匹配了所有字符。正确的做法是\.在正则中大多数标点都需要反斜杠转义才能表示字面值。我现在的习惯是不确定是否需要转义时加上反斜杠总没错。性能问题也值得注意。处理大文件时避免使用嵌套量词如(.*)*这样的模式它们会导致灾难性回溯。有次用.*.*\.com匹配邮箱处理10MB文件时Notepad直接卡死。优化为\w\w\.com后速度提升了上百倍。6. Notepad专属技巧提升效率的小秘密很多人不知道Notepad支持替换表达式中的大小写转换。比如把#define常量转为小写可以用#define ([A-Z_])匹配#define \L$1替换。\L表示将后续内容转为小写同理\U转大写\E结束转换。我经常用书签功能配合正则搜索。先^ERROR找到所有错误行按F2添加书签然后通过菜单只显示带书签的行。这个组合技在分析大型日志时能节省大量滚动时间。对于重复性任务可以录制宏来自动化正则替换流程。比如我有个标准化的日志清理流程先移除时间戳然后过滤特定级别最后提取关键字段。把这些步骤录制成宏后处理新日志只需按个快捷键。