![如何使用正则表达式和 Notepad++ 从日志字符串中提取 IP 地址](https://linux22.com/image/1560568/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%92%8C%20Notepad%2B%2B%20%E4%BB%8E%E6%97%A5%E5%BF%97%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E6%8F%90%E5%8F%96%20IP%20%E5%9C%B0%E5%9D%80.png)
我从日志文件中找到了这样的字符串
rule family="ipv4" source address="54.246.81.158" reject
rule family="ipv4" source address="175.36.129.24" reject
如何在 Notepad++ 文本编辑器中使用正则表达式从每个字符串中匹配一个 IP 地址,然后用匹配的 IP 替换原始地址?
预期结果:
54.246.81.158
175.36.129.24
我更喜欢使用正则表达式来实现目标搜索和替换仅。如果在 Notepad++ 中可能的话,我知道我可以使用宏功能,但我不想这样做。
因此,首先,我们将使用正则表达式 ( \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
) 匹配 IP。其次,我们将原始字符串替换为步骤 #1 中的 IP 但我不确定使用 Notepad++ 是否可行。如果我失败了,我会使用 vim :-)
答案1
- Ctrl+H
- 找什么:
^.+?((?:\d+\.){3}\d+).+$
- 用。。。来代替:
$1
- 检查环绕
- 检查正则表达式
- 请勿检查
. matches newline
- Replace all
解释:
^ : beginning of line
.+? : 1 or more any character but newline
( : start group 1
(?: : start non capture group
\d+ : 1 or more digit
\. : a dot
){3} : end group, must appear 3 times
\d+ : 1 or more digit
) : end group 1
.+ : 1 or more any character but newline
$ : end of line
替代品:
$1 : content of group 1 (ie. the IP)
给定示例的结果:
54.246.81.158
175.36.129.24
为了确保你有一个 IP 地址,请使用
((?: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]?)))
代替
((?:\d+\.){3}\d+)
答案2
更简单的解决方案,但不使用 RegEx:
代替
rule family="ipv4" source address="
什么都没有,
" reject
什么也没有。
答案3
答案4
这是用于匹配 IP 地址的完整正则表达式,它验证了以下有效的 IPv4 IP 地址规则。
- 四个从 0 到 255 的整数。
- 任何包含三个以上点 (.) 的地址均无效。
- 任何大于 255 的数字的地址都是无效的。
正则表达式
^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
让我们把它分解成更小的部分:
- [0-9][0-9]? 涵盖 0-99 的数字
- 1[0-9][0-9] 涵盖 100-199 个数字
- 2[0-9][0-9] - 这应该是一个有效的 IP 地址吗?不。
- 2[0-9][5] - 这应该是一个有效的 IP 地址吗? 不。
- 2[0-4][0-9] - 涵盖 200 至 249
- 25[0-5] - 涵盖 250-255
如果你想学习如何一步一步构建这个 REGEX,你可以看看这个视频(https://www.youtube.com/watch?v=WGd5llvr7e4)
这里有一个快速演示多个 IP 地址的验证。
免责声明:此视频来自我的 Youtube 频道。但它详细介绍了如何使用 REGEX 验证 IP 地址。如果反对票很多,我将删除该链接。谢谢。