我试图在perl
中获得IPV4的最短正则表达式假设我们有以下
my $ip = "192.168.1.23";
$ip =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/;
$ip =~ /(\d{1,3})(\.\d{1,3}){3}/;
或者我们可以用点
分割我们有没有办法在表达式中只使用\d{1,3}
一次?就像我们的第一个ip匹配表达式一样,我使用\d{1,3}
四次,第二个表达式使用它两次。
答案 0 :(得分:2)
您当前的模式匹配许多非IPV4地址的字符串,因此我无法确定您的条件是什么。您也可以.*
as melpomene says
稍微好一点的是/[\d.]{7,15}/
或/(?:\d{1,3}:){3}\d{1,3}/
,但最好的方法是use Regexp::Common
$RE{net}{IPv4}
会给你正确的模式
(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))