正则表达式匹配并不总是存在元素
Regex match not always present elements
我有这些输入:
+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”:a /
然后到行尾的任何零个或多个字符
以上回答正确。非常感谢!
在 grok 语法中:
IN_OUT [+-]
FORENSIC_ID [\w:]+
OPTIONAL [\|]?%{WORD:method}\s%{URIPATHPARAM:request}
CUSTOM %{IN_OUT:in_out}%{FORENSIC_ID:forensic_id}%{OPTIONAL:rest}*
我有这些输入:
+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”:a/
然后到行尾的任何零个或多个字符
以上回答正确。非常感谢!
在 grok 语法中:
IN_OUT [+-]
FORENSIC_ID [\w:]+
OPTIONAL [\|]?%{WORD:method}\s%{URIPATHPARAM:request}
CUSTOM %{IN_OUT:in_out}%{FORENSIC_ID:forensic_id}%{OPTIONAL:rest}*