我根据以下规则编写 Perl 单行代码以匹配 IP 地址:
只匹配前三个八位位组,而四个八位位组必须是有效的 0-255 ,除了该数字或“ . ”不得存在于第一个八位位组之前,并且数字或“ . ”也不得存在于四个八位位组之后
例子
export IP=100.187.34
应匹配的 IP 示例
:100.187.34.12:.10
IP=100.187.34.100$
AAA100.187.34.199BBB
address:100.187.34.210+
不应匹配的 IP 示例
55.100.187.34.99
.100.187.34..
100.187.34.100.1
100.187.34.2100
1.100.187.34
100.187.34.1.1
所以这是我的代码(不按照我的规则工作):
echo [...]xxx.xxx.xxx.xxx[...] | perl -pe 'print if /(?<![\d.])\Q$ENV{IP}\E(?=\.(?:1?\d?\d|2[0-4][0-9]|25[0-5])(?!\d))/; '
问题是我的代码几乎匹配任何数字
请建议我需要在我的代码中修复什么,以便仅根据规则匹配 IP