Notepad++正则表达式:查找符合条件的多行内容组
用Notepad++正则匹配多行abr:rules组的解决方案
没问题,我经常用Notepad++处理这种XML片段的多行匹配,给你一步步来:
1. 基础匹配:捕获所有abr:rules组
如果你只是想匹配每一个完整的abr:rules块(从<abr:rules>开始到</abr:rules>结束),用这个正则:
(?s)<abr:rules>.*?</abr:rules>
- (?s):开启「单行模式」,让
.能匹配换行符(默认.不匹配换行) - .*?:非贪婪匹配,确保只匹配到当前块的
</abr:rules>,不会从第一个<abr:rules>直接跳到最后一个结束标签
2. 精准匹配:按条件筛选特定组
如果要匹配满足特定条件的组(比如code是ABB,或者subapplication是FM),可以调整正则:
示例1:匹配code为ABB的组
(?s)<abr:rules>(?:(?!</abr:rules>).)*<abr:code>ABB</abr:code>(?:(?!</abr:rules>).)*</abr:rules>
示例2:匹配subapplication为FM的组
(?s)<abr:rules>(?:(?!</abr:rules>).)*subapplication="FM"(?:(?!</abr:rules>).)*</abr:rules>
- (?:(?!</abr:rules>).)*:这部分是核心,意思是「匹配任意字符,直到遇到
</abr:rules>就停止」,用来限制匹配范围在当前rules块内,不会跨块匹配
3. Notepad++操作步骤
- 把你的XML内容粘贴到Notepad++里
- 按
Ctrl+F打开查找对话框 - 切换到「正则表达式」模式(记得不要勾选「.匹配换行符」,因为我们已经用
(?s)在正则里开启了,重复开启会冲突) - 输入上面的正则,点击「查找下一个」定位单个匹配,或者「查找全部」列出所有符合条件的块
如果你的Notepad++版本比较旧,可能需要把(?s)换成勾选「.匹配换行符」选项,效果是一样的。
内容的提问来源于stack exchange,提问作者farbiondriven
相关产品推荐
相关产品推荐

