Regex 忽略字符,直到将字符与正则表达式匹配后出现空白
我有一根绳子Regex 忽略字符,直到将字符与正则表达式匹配后出现空白,regex,Regex,我有一根绳子 fw[0000]: IN=br1 MAC=00:80:00:00:00:8b SRC=0000::0000:000:0000:0000 DST=0000::1:2 LEN=179 PROTO=UDP DPT=547 Unsolicited IPv6 Packet 并希望提取消息的最后一部分,以便生成捕获 Unsolicited IPv6 Packet 我正在使用当前的正则表达式字符串([^=]*$),这让我 547 Unsolicited IPv6 Packet 但是我被困在
fw[0000]: IN=br1 MAC=00:80:00:00:00:8b SRC=0000::0000:000:0000:0000 DST=0000::1:2 LEN=179 PROTO=UDP DPT=547 Unsolicited IPv6 Packet
并希望提取消息的最后一部分,以便生成捕获
Unsolicited IPv6 Packet
我正在使用当前的正则表达式字符串([^=]*$)
,这让我
547 Unsolicited IPv6 Packet
但是我被困在如何从捕获组中排除547
。换句话说,捕获最终等号之后的所有内容,同时排除位于等号和它前面的第一个空格之间的内容
这里的
547
只是一个任意值。另一个日志行可能在结束消息文本之前将PROTO=UDP
作为最后一个键/值对。如果您的工具或语言可以访问正则表达式捕获组,则您可以将正则表达式表述为消耗所有内容,包括最后一个键=值对:
^.*\b[^=\s]+=[^=\s]+\s+(.*)$
您想要的匹配将显示为第一个捕获组$1
使用“正向查找”:
(?您可以匹配等号和它后面的第一个“单词”,然后是空格(或\s+
用于一个或多个空格字符)
见
另一个选项是太匹配,直到最后一个等号后跟匹配第一个“单词”和1个或多个空格
在组1中捕获至少匹配一个非空白字符,然后匹配其余字符(不包括等号)
^.*=[^=\s]+\s+(\S[^=]+)$
请参阅另一种什么编程语言?这将在Graylog提取器中使用,该提取器使用Java引擎处理正则表达式。请尝试
=[^\s=]+\s+([^=]*$)
^.*=[^=\s]+\s+(\S[^=]+)$