正则表达式从不同的模式事件中提取第一个 IP

ak9*_*092 3 regex regex-group

我试图通过正则表达式从以下事件中提取第一个 IP -

For: ${nd:app://${namingDetails}.for.net.sh}, 4.5.3.2, 23.200.06.110 V-
For: 10.10.21.17, 5.18.11.74, 23.36.3.22 V-
For: 23.3.39.1, 21.61.39.21 V-
For: 3.3.39.1 V-
Run Code Online (Sandbox Code Playgroud)

因此,如果我们考虑上述事件,我的正则表达式应将以下 IP 匹配为first_ip

4.5.3.2
10.10.21.17
23.3.39.1
3.3.39.1
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。谢谢。

这就是我能走多远 - > https://regex101.com/r/6K3AKX/1

(?:For:\s)?(?:For:.+)?((?<first_ip>\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))\,
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

您可以使用这个正则表达式:

^For:\s.*?\b(?<first_ip>\d{1,3}(?:\.\d{1,3}){3})
Run Code Online (Sandbox Code Playgroud)

并抓取命名的捕获组first_ip

正则表达式详细信息:

  • ^: 开始
  • For:\S: 匹配For后跟一个空格
  • .*?\b:匹配 0 个或多个后跟单词边界的任何字符
  • (?<first_ip>\d{1,3}(?:\.\d{1,3}){3}):匹配命名捕获组中的 IP 地址first_ip

更新了正则表达式演示

如果您使用 php/PCRE,则使用:

^For:\s.*?\K\b\d{1,3}(?:\.\d{1,3}){3}
Run Code Online (Sandbox Code Playgroud)