用于处理数字签名的多个条目的正则表达式
Regex to process multiple entries for a digital signature
我这里有正则表达式和相应的匹配输出:
https://regexr.com/6jiei
Which matches IP and time stamp for all entries currently but I also want the hexadecimal value for identification.
对于以下 输入字符串:
IDVal 4273E6D162ED2717A1CF4207A254004CD3F5307B
Posted 2022-12-28 07:35:55
Status 2022-12-28 08:10:11
Entry 94.62.86.22 2022-12-28 11:10:30
Entry 21.12.26.23 2022-12-28 13:10:30
Entry 113.132.26.203 2022-12-28 12:56:30
Entry 31.12.27.22 2022-12-28 12:35:30
IDVal 4273E6D162ED2717A1CF4207A254004CD3F5307B
Posted 2022-12-28 07:35:55
Status 2022-12-28 08:10:11
Entry 94.62.86.22 2022-12-28 11:10:30
Entry 21.12.26.23 2022-12-28 13:10:30
Entry 113.132.26.203 2022-12-28 12:56:30
Entry 31.12.27.22 2022-12-28 12:35:30
IDVal 0D12D8E72DED99EE31BB0C57789352BED0CEEEFF
Posted 2022-12-28 07:30:55
Status 2022-12-28 06:10:11
Entry 51.102.52.36 2022-12-28 07:10:30
输出应该 match/capture :
4273E6D162ED2717A1CF4207A254004CD3F5307B
94.62.86.22 2022-12-28 11:10:30
21.12.26.23 2022-12-28 13:10:30
113.132.26.203 2022-12-28 12:56:30
31.12.27.22 2022-12-28 12:35:30
4273E6D162ED2717A1CF4207A254004CD3F5307B
94.62.86.22 2022-12-28 11:10:30
21.12.26.23 2022-12-28 13:10:30
113.132.26.203 2022-12-28 12:56:30
31.12.27.22 2022-12-28 12:35:30
0D12D8E72DED99EE31BB0C57789352BED0CEEEFF
51.102.52.36 2022-12-28 07:10:30
我试过这个正则表达式:
(?s)(\b[A-F\d]{40}\b).*?(\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b).?(\b\d{4}(-\d{2}){2} (\d{2}:){2}\d{2}\b)
然后 returns 十六进制数字签名,但它只是 returns 第一个条目而不是 returns 所有相应的条目。
您可以从后面开始构建查询。
案例 1:4273E6D162ED2717A1CF4207A254004CD3F5307B
:
- 长度为 40 的多个字母数字字符,如您的正则表达式尝试所暗示:
[\w]{40}
案例 2:113.132.26.203 2022-12-28 12:56:30
:
- 一组数字和“:”:
[\d:]+
,
- 一个space,
- 一组数字和“-”:
[\d-]+
- 一个space,
- 一组数字和“.”:
[\d\.]+
最终正则表达式:
"([\w]{40}|[\d\.]+ [\d-]+ [\d:]+)$"
对你有用吗?
============================================= ===================
编辑:与关键字段的上下文匹配
另一种选择是检查 Entry
或 IDVal
是否在您需要匹配的行的开头:
(?:Entry |IDVal )(.*)
因此,您的代码应如下所示:
pattern := '(?:Entry |IDVal )(.*)'
regex := regexp.MustCompile(pattern)
matches := regex.FindAllStringSubmatch(str1, -1)
变量 matches
将包含长度为 2 [[m1,g1], [m2,g2], ... ]
的数组,其中每个列表将包含匹配 m<i>
和组 g<i>
。您的信息将包含在相应的组内 g<i>
.
我这里有正则表达式和相应的匹配输出: https://regexr.com/6jiei
Which matches IP and time stamp for all entries currently but I also want the hexadecimal value for identification.
对于以下 输入字符串:
IDVal 4273E6D162ED2717A1CF4207A254004CD3F5307B
Posted 2022-12-28 07:35:55
Status 2022-12-28 08:10:11
Entry 94.62.86.22 2022-12-28 11:10:30
Entry 21.12.26.23 2022-12-28 13:10:30
Entry 113.132.26.203 2022-12-28 12:56:30
Entry 31.12.27.22 2022-12-28 12:35:30
IDVal 4273E6D162ED2717A1CF4207A254004CD3F5307B
Posted 2022-12-28 07:35:55
Status 2022-12-28 08:10:11
Entry 94.62.86.22 2022-12-28 11:10:30
Entry 21.12.26.23 2022-12-28 13:10:30
Entry 113.132.26.203 2022-12-28 12:56:30
Entry 31.12.27.22 2022-12-28 12:35:30
IDVal 0D12D8E72DED99EE31BB0C57789352BED0CEEEFF
Posted 2022-12-28 07:30:55
Status 2022-12-28 06:10:11
Entry 51.102.52.36 2022-12-28 07:10:30
输出应该 match/capture :
4273E6D162ED2717A1CF4207A254004CD3F5307B
94.62.86.22 2022-12-28 11:10:30
21.12.26.23 2022-12-28 13:10:30
113.132.26.203 2022-12-28 12:56:30
31.12.27.22 2022-12-28 12:35:30
4273E6D162ED2717A1CF4207A254004CD3F5307B
94.62.86.22 2022-12-28 11:10:30
21.12.26.23 2022-12-28 13:10:30
113.132.26.203 2022-12-28 12:56:30
31.12.27.22 2022-12-28 12:35:30
0D12D8E72DED99EE31BB0C57789352BED0CEEEFF
51.102.52.36 2022-12-28 07:10:30
我试过这个正则表达式:
(?s)(\b[A-F\d]{40}\b).*?(\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b).?(\b\d{4}(-\d{2}){2} (\d{2}:){2}\d{2}\b)
然后 returns 十六进制数字签名,但它只是 returns 第一个条目而不是 returns 所有相应的条目。
您可以从后面开始构建查询。
案例 1:4273E6D162ED2717A1CF4207A254004CD3F5307B
:
- 长度为 40 的多个字母数字字符,如您的正则表达式尝试所暗示:
[\w]{40}
案例 2:113.132.26.203 2022-12-28 12:56:30
:
- 一组数字和“:”:
[\d:]+
, - 一个space,
- 一组数字和“-”:
[\d-]+
- 一个space,
- 一组数字和“.”:
[\d\.]+
最终正则表达式:
"([\w]{40}|[\d\.]+ [\d-]+ [\d:]+)$"
对你有用吗?
============================================= =================== 编辑:与关键字段的上下文匹配
另一种选择是检查 Entry
或 IDVal
是否在您需要匹配的行的开头:
(?:Entry |IDVal )(.*)
因此,您的代码应如下所示:
pattern := '(?:Entry |IDVal )(.*)'
regex := regexp.MustCompile(pattern)
matches := regex.FindAllStringSubmatch(str1, -1)
变量 matches
将包含长度为 2 [[m1,g1], [m2,g2], ... ]
的数组,其中每个列表将包含匹配 m<i>
和组 g<i>
。您的信息将包含在相应的组内 g<i>
.