Matcha en ip-adress med posix extended regexp

I gårdagens post fanns ett regexp med för att matcha en ip-adress:

[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}

Detta regex skulle matcha allt från 0.0.0.0 till 999.999.999.999 och så kan man ju inte ha det 😛

Jag satte mig därför och filade lite till och så här långt har jag kommit

^[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]$

Det skulle matcha allt från 0.0.0.0 till 299.299.299.299 så det är fortfarande inte helt bra eftersom man bara vill matcha allt mellan 0.0.0.0 och 255.255.255.255. Utmaningen här är att få in allt i ett regex, det skulle vara lätt att åtgärda genom t.ex. en loop. Finns det nån som har ett bra tips så lämna gärna en kommentar.

EDIT:

Med Mekaniserad apelsins hjälp står nu svaret klart:

^(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$
  1. nikke’s avatar

    Funkar inte:
    ^[1-2]?[0-9]?[0-9]\.[1-2]?[0-5]?[0-5]\.[1-2]?[0-5]?[0-5]\.[1-2]?[0-5]?[0-5]$

    Svara

    1. micke’s avatar

      Nope, då kan du t.ex. match 299 på första oktetten men inte t.ex. 199 på de övriga. så 299.0.0.0 skulle funka men inte 199.199.199.199 vilket är en giltig adress.

      /Micke

      Svara

    2. nikke’s avatar

      Fast :
      ^[1-2]?[0-5]?[0-5]\.[1-2]?[0-5]?[0-5]\.[1-2]?[0-5]?[0-5]\.[1-2]?[0-5]?[0-5]$

      Svara

    3. micke’s avatar

      Fast där har du samma problem t.ex. 199 funkar inte. det blir roll over till 200 vid 155. Man skulle behöva en grupp typ [0-255] fast just det funkar då inte.

      /Micke

      Svara

    4. Andreas Olsson’s avatar

      Jag har hört ryktas att IP-adresser även kan se ut på det här viset…

      2001:16d8:cc88:1001:223:aeff:feb1:b64

      Svara

    5. micke’s avatar

      Nej Andol, det behöver man inte oroa sig för, iaf inte i Södertälje stadsnät 😉

      /Micke

      Svara

    6. mekaniseradApelsin’s avatar

      ([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]){1}

      ?

      Svara

      1. micke’s avatar

        Ser spännande ut, måste testas!

        Svara

        1. micke’s avatar

          |-operatorn var förstås svaret, men jag fick ändra lite i syntaxen för att min bash skulle svälja det:

          ^(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$

          /Micke

          Svara

          1. Erik Johansson’s avatar

            {1,3} istället för {3} så du kan matcha ip adresser som: 127.1, 10.1 eller 192.168.1, för oss med många nullbytes i våra ip adresser (har själv bara 1st nolla).

            Svara

Reply to micke Avbryt svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *

*

Switch to our mobile site

Page optimized by WP Minify WordPress Plugin