Regex分组拆分问题:如何将指定消息按规则拆分为多个分组
正则实现方案
核心思路
匹配以[标签名]开头的片段,捕获标签名和对应内容,直到遇到下一个[标签名]或字符串结尾,支持任意数量的分组。
正则表达式
\[(\w+)\]\s*(.*?)(?=\s*\[\w+\]|$)
规则解释
\[(\w+)\]:匹配[标签名]格式的前缀,将标签名(如Rule、Source)捕获到分组1\s*:匹配标签与内容之间的任意空白字符(空格、制表符等)(.*?):非贪婪模式匹配标签对应的内容,捕获到分组2,避免过度匹配后续内容(?=\s*\[\w+\]|$):正向预查,确保匹配停止在下一个标签开头或者字符串末尾
匹配示例
针对输入:[Rule] 'Server - update repository' [Source] 10.10.10.10 [User] _Server [Content] HTTP GET http://example.com
会得到4组匹配结果(每组含两个捕获项):
- 分组1:
Rule,分组2:'Server - update repository' - 分组1:
Source,分组2:10.10.10.10 - 分组1:
User,分组2:_Server - 分组1:
Content,分组2:HTTP GET http://example.com
关键提示
非贪婪模式.*?是实现多分组正确拆分的核心,若改为贪婪模式.*会直接匹配到字符串末尾,无法拆分多个分组。
内容的提问来源于stack exchange,提问作者h0llym0lly
相关产品推荐
相关产品推荐

