正则表达式匹配RFC5424结构化数据(避免][间含空格的情况)
匹配RFC5424结构化数据的正则表达式解决方案
需求与问题
需要编写正则表达式匹配RFC5424标准的结构化数据,核心规则:
- 仅匹配格式为
[标识符@编号 key="value" ...]的内容,其中key="value"可重复出现 - 同一行的多个括号组必须无空格直接连接(如
[组1][组2]),若][之间有空格、括号前后带空格(如] [或[),则视为无效,不予匹配
之前尝试过多个正则变体,比如:
\[\S[a-zA-Z0-9]+@[0-8]+((\s[a-zA-Z]+=".+")+[\]]+)+
但始终无法过滤掉包含空格的无效情况,比如括号后带空格的场景。
测试数据
# 无效案例(不匹配) invalid (do not match); should not match, space between ][ [Example1SDID@32473 iut="3" eventSource="Application" eventID="1011"] [example1gPriority@32473 class="high"]; should not match, space after [ and/or ][ Example2aSDID@32473 iut="3" eventSource="Application" eventID="1011"][example2fPriority@32473 class="high"][Example2bSDID@32473 iut="3" eventSource="Application" eventID="1011"][ example2ePriority@32473 class="high"][Example2cSDID@32473 iut="3" eventSource="Application" eventID="1011" ][ example2dPriority@32473 class="high"][Example3SDID@32473 iut="3" eventSource="Application" eventID="1011"][example2Priority@32473 nothing][Example2SDID@32473 iut="3" eventSource="Application" eventID="1011"][example2Priority@32473 class="high" ][Example2SDID@32473 iut="3" eventSource="Application" eventID="1011"][example2Priority@32473 class="high" ][this@that][example2Priority@32473 nothing][example4SDID@32473 iut="3" eventSource="Application" eventID="1011" ][asldkf;asd;fjas;dfj;asdjkf;asjkdffkdk][asdfas;dfjasdfdfdss] # 有效案例(匹配) valid (match) [example4SDID@32473 iut="3" eventSource="Application" eventID="1011"][example5SDID@32473 iut="3"][example6SDID@32473 iut="3" eventSource="Application" eventID="1011"][example6Priority@32473 class="high"]
正确正则表达式
^\[(?:[a-zA-Z0-9]+@[0-8]+(?:\s+[a-zA-Z]+="[^"]*")*)\](?:\[(?:[a-zA-Z0-9]+@[0-8]+(?:\s+[a-zA-Z]+="[^"]*")*)\])*$
正则解析
^+$:限定整行匹配,避免部分匹配无效内容\[+\]:匹配成对的方括号,确保括号前后无空格[a-zA-Z0-9]+@[0-8]+:匹配RFC5424的结构化数据标识符(字母数字@0-8数字)(?:\s+[a-zA-Z]+="[^"]*")*:匹配任意数量的key="value"对,[^"]*确保只匹配双引号内的内容,防止跨括号匹配(?:\[(?:...)\])*:匹配多个连续无空格连接的括号组,确保][之间无空格
匹配效果
- 完全匹配所有符合规则的有效行
- 自动过滤包含空格的无效案例(括号前后空格、
][间空格) - 支持单个或多个连续的合法括号组
内容的提问来源于stack exchange,提问作者josh assing
相关产品推荐
相关产品推荐

