如何解决正则表达式匹配并不总是存在元素
我有这些输入:
+36919:60546a74:0|POST /api/v1/transactions
-36919:60546a74:0
我正在寻找一个正则表达式(或 grok 模式)来给我这些输出:
对于第一行:
in_out: +
id: 36919:60546a74:0
method: POST
url: /api/v1/transactions
对于第二行:
in_out: -
id: 36919:60546a74:0
非常感谢!
编辑:
我试过这种模式:
IN_OUT [+-]{1}
FORENSIC_ID .*?(?=\|?)
CUSTOM %{IN_OUT:in_out}%{FORENSIC_ID:forensic_id}\|%{WORD:method} %{URIPATHPARAM:request}
第一行的结果很好,但第二行不行,因为没有“|”在 ID 之后。
解决方法
您可以使用以下正则表达式:
^(?<in_out>[-+])(?<id>[\w:]+)(?:\|(?<method>[A-Z]+)\s+(?<url>/.*))?
参见regex demo。
详情:
-
^
- 字符串的开始 -
(?<in_out>[-+])
- 组“in_out”:-
或+
字符 -
(?<id>[\w:]+)
- 组“id”:一个或多个单词或:
个字符 -
(?:\|(?<method>[A-Z]+)\s+(?<url>/.*))?
- 一个可选的非捕获组:-
\|
-|
字符 -
(?<method>[A-Z]+)
- 组“方法”:一个或多个大写 ASCII 字母 -
\s+
- 一个或多个空格 -
(?<url>/.*)
- 将“url”分组:一个/
,然后是任何零个或多个字符到行尾
-
上面的答案是正确的。非常感谢!
在 grok 语法中:
IN_OUT [+-]
FORENSIC_ID [\w:]+
OPTIONAL [\|]?%{WORD:method}\s%{URIPATHPARAM:request}
CUSTOM %{IN_OUT:in_out}%{FORENSIC_ID:forensic_id}%{OPTIONAL:rest}*
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。