^(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2}))(?:(?:(?:\.(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2})))){3}|(?:\.(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2}))){0,2}\.\*)$
構築を表示し、結果を検証するための短い Ruby スクリプトを次に示します。
#!/usr/bin/env ruby
octet2 = /(?:\d{1,2})/
octet3 = /(?:[0-1]\d\d|2[0-4]\d|25[0-5])/
octet = /(?:#{octet3}|#{octet2})/
dot_octet = /(?:\.#{octet})/
trailing_wild_ip = /^#{octet}(?:(?:#{dot_octet}){3}|#{dot_octet}{0,2}\.\*)$/
%w{
1.2.*
1.2.3.*
1.2.3.4
1
1.2
1.2*
1.2.3
1.2.3*
1.*.3.4
}.
map {|ip| [ip, ip.match(trailing_wild_ip) ? 'valid' : 'invalid' ] }.
each {|ip,match| puts "#{ip} => #{match}" }
# output:
1.2.* => valid
1.2.3.* => valid
1.2.3.4 => valid
1 => invalid
1.2 => invalid
1.2* => invalid
1.2.3 => invalid
1.2.3* => invalid
1.*.3.4 => invalid