Regex - Match RFC 5424“structured data”(停止匹配,“] [”之间有空格)

3df52oht  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(149)

这是我尝试的:这似乎是'最接近' \[\S[a-zA-Z0-9]+@[0-8]+((\s[a-zA-Z]+=".+")+[\]]+)+

\[[a-zA-Z0-9]+@[0-8]+(\s[a-zA-Z]+=".+"(?=\])+)+
\[\S[a-zA-Z0-9]+@[0-8]+(\s[a-zA-Z]+=".+"(?=\])+)+
\[[^ ][a-zA-Z0-9]+@[0-8]+(\s[a-zA-Z]+=".+"(?=\])+)+
\[\S[a-zA-Z0-9]+@[0-8]+((\s[a-zA-Z]+=".+")+\S[\]]+)+
\[\S[a-zA-Z0-9]+@[0-8]+((\s[a-zA-Z]+=".+")+[\]]+)\S
(\[\S[a-zA-Z0-9]+@[0-8]+((\s[a-zA-Z]+=".+")+[\]]+)+\S)

但是我保留匹配] ...(括号后的空格),基本上我应该只匹配满足[*@# something="value" ...]的行,其中something=“value”可以重复。如果在同一行上有另一个括号,它应该作为一行匹配,括号之间没有空格... [*@# something="val"][*@# something="val"]
下面是我测试的数据:

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;dfjasdf
dfdss]

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"]
aelbi1ox

aelbi1ox1#

如果不需要部分匹配,可以使用^$锚定模式
为了避免在方括号] [和方括号[ ]之间出现空格,您可以将整个部分[ ]重复一次或多次,以便在方括号] [和方括号[ ]之间没有空格。
然后使用取反的字符类从"..."进行匹配
注意\s也可以匹配换行符。

^(?:\[[a-z0-9]+@[0-8]+(?:\s[a-zA-Z]+="[^"]*")+])+$

说明

  • ^字符串开头
  • (?:非捕获组(对于[...]
  • \[匹配[
  • [a-z0-9]+@[0-8]+匹配1+字符a-z 0 -9 @ 1+数字0-8
  • (?:非捕获组(对于..=".."
  • \s[a-zA-Z]+="[^"]*"匹配一个空白字符,1+字符a-zA-Z =,然后"..."
  • )+关闭非捕获组并重复1+次
  • ]按字面匹配
  • )+关闭外部非捕获组,并重复1+次
  • $字符串结束

Regex demo
如果要在双引号之间允许转义双引号:

^(?:\[[a-z0-9]+@[0-8]+(?:\s[a-zA-Z]+="(?:[^"\\]*(?:\\.[^"\\]*)*)")+])+$

Regex demo

相关问题