Toon posts:

[PHP]ip uit strinig halen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ok ik heb het volgende probleem,

ik heb een string en daar staat ergens een ip in.
Maar nu wil ik alleen dat ip in een nieuwe string hebben....

De string met het ip kan er telkens anders uitzien: bv

ik:ben@123.123.123.123:12
123.123.123.123
ip : 123.123.123.123 user: ik pass: ben port: 12

etc.

Iemand enig idee, hoe ik echt alleen het ip eruit kan halen?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
[php] eregi_replace vraag/

Zoek eens even naar de regexp Tutorial van Arien

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Glimi schreef op 05 augustus 2002 @ 11:59:
Zoek eens even naar de regexp Tutorial van Arien
hier
foei ;) jij zou toch moeten weten dat die in de faq staat :+

Doet iets met Cloud (MS/IBM)


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
PHP:
1
2
3
4
$string = $ip_string;
if (preg_match('/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/',$string,$reg)) {
   $ip = $reg[1];
}

probeer dit eens. Ik heb het niet getest maar zoiets zou moeten werken.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
D2k schreef op 05 augustus 2002 @ 12:01:
[...]
hier
foei ;) jij zou toch moeten weten dat die in de faq staat :+
Trigger finger aap :) Jij zou meten weten dat de URL die ik geef, de tutorial bevat, maar daar begint ie niet mee :P

  • Blubber
  • Registratie: Mei 2000
  • Niet online
stekkel schreef op 05 augustus 2002 @ 12:06:
PHP:
1
2
3
4
$string = $ip_string;
if (preg_match('/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/',$string,$reg)) {
   $ip = $reg[1];
}

probeer dit eens. Ik heb het niet getest maar zoiets zou moeten werken.
mmm dat kan denk ik wel maar dan match je ook 44343443.3442443.3444324.432 bijvoorbeeld en das geen id :)

PHP:
1
$ip = preg_replace('/(.*)([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})(.*)/', ,"\\2", $string)


Zoiets match alleen ip's

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

hehe, Blubber was me net voor :)


----oud-------

nog ietsje beter:

PHP:
1
2
3
4
$string = $ip_string;
if (preg_match('/.*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/',$string,$reg)) {
   $ip = $reg[1];
}

[ Voor 0% gewijzigd door Tjark op 05-08-2002 12:14 . Reden: Blubber was net ff sneller ]

*insert signature here


  • Blubber
  • Registratie: Mei 2000
  • Niet online
baas boven baas :P

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

damn ja, zit hier op stage via vnc thuis te werken.... loopt niet altijd even snel :)

*insert signature here


  • Blubber
  • Registratie: Mei 2000
  • Niet online
hehe, moet je ruim zien. iig, als het goed is werken beide onze oplossingen goed, en aleen op ip's :)

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
TjarkVerhoeven schreef op 05 augustus 2002 @ 12:12:
hehe, Blubber was me net voor :)


----oud-------

nog ietsje beter:

PHP:
1
2
3
4
$string = $ip_string;
if (preg_match('/.*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/',$string,$reg)) {
   $ip = $reg[1];
}
Wat zijn jullie allemaal scherp vandaag :) :)

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

tja, de temperaturen zijn weer normaal he :)

*insert signature here


Verwijderd

Topicstarter
TjarkVerhoeven schreef op 05 augustus 2002 @ 12:12:
hehe, Blubber was me net voor :)


----oud-------

nog ietsje beter:

PHP:
1
2
3
4
$string = $ip_string;
if (preg_match('/.*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/',$string,$reg)) {
   $ip = $reg[1];
}
Bedankt voor je code, maar hij doet het niet helemaal goed ;)

nu maakt ie van bv:
ftp://login:pass@210.217.122.60:12

0.217.122.60

Hoe komt dit nu?
Ik heb namelijk helemaal geen ervaring met die regax ofzo ;)

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

PHP:
1
preg_match('/.*\b([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/',$string,$reg)

Geen verklaring maar met een word boundary werkt ie wel.

Skill is when luck becomes a habit.


Verwijderd

Topicstarter
ok ik heb al gevonden waar het aan ligt (denk ik)
Doordat bij de eerste serie een variabele van 1-3 wordt gebruikt, pakt ie alleen de eerste.
Want als ik er:
PHP:
1
if (preg_match('/.*([0-9]{3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/',$string,$reg)) {

van maak, dan pakt ie hem wel goed.

Maar dan pakt ie weer niks als er maar 2 getallen als eerste staan :(

Verwijderd

Topicstarter
aaah bedankt eek.
Je was me net voor... ;)

Maar nu doet ie het idd wel...

Allemaal heel erg bedankt voor jullie hulp!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Verwijderd schreef op 05 augustus 2002 @ 12:25:
[...]

Bedankt voor je code, maar hij doet het niet helemaal goed ;)

nu maakt ie van bv:
ftp://login:pass@210.217.122.60:12

0.217.122.60

Hoe komt dit nu?
Ik heb namelijk helemaal geen ervaring met die regax ofzo ;)
Ik werk aan een oplossing :)

Gevonden:
preg_match('/(^|\b)([0-9]{1,3} ......

de match bevind zich nu in $reg[2]

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

mensen... wat doen we weer moeilijk... pfff

plak er "ftp://" voor. (als dat er nog niet voorstaat..)

en parse ze door http://nl.php.net/parse_url . en klaar....


Al dat onnodig regexen.. :(

Programmer - an organism that turns coffee into software.


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
LuCarD schreef op 05 augustus 2002 @ 12:55:
mensen... wat doen we weer moeilijk... pfff

plak er "ftp://" voor. (als dat er nog niet voorstaat..)

en parse ze door http://nl.php.net/parse_url . en klaar....


Al dat onnodig regexen.. :(
Hehehe, dat is ook een oplossing, was ff vergeten dat die functie bestond. Je moet dan wel ff checken of de teruggeven host een ip-nummer is of een dns-name.

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

yupz, ik zie 't al, die eerste .* is nl greedy:

PHP:
1
2
3
4
$string = $ip_string; 
if (preg_match('/.*?([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/',$string,$reg)) { 
   $ip = $reg[1]; 
}

eigenlijk mogen die .* beiden weg.

PHP:
1
2
3
4
$string = $ip_string; 
if (preg_match('/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/',$string,$reg)) { 
   $ip = $reg[1]; 
}

*insert signature here


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

LuCarD schreef op 05 augustus 2002 @ 12:55:
mensen... wat doen we weer moeilijk... pfff

plak er "ftp://" voor. (als dat er nog niet voorstaat..)

en parse ze door http://nl.php.net/parse_url . en klaar....


Al dat onnodig regexen.. :(
hehe 'plak er ftp:// voor'
Moet je natuurlijk al _wel_ weten waar 't ip staat.....

*insert signature here


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

TjarkVerhoeven schreef op 05 augustus 2002 @ 14:22:
[...]

hehe 'plak er ftp:// voor'
Moet je natuurlijk al _wel_ weten waar 't ip staat.....
parse_url werkt met

ftp://login:pass@210.217.122.60:12
ftp://login@210.217.122.60:12
ftp://210.217.122.60:12
ftp://login:pass@210.217.122.60

etc...

dus je hoeft lokatie van het IP-address helemaal niet te weten...

Programmer - an organism that turns coffee into software.


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

We gaan toch niet dubbelposten he? Ik heb je bericht al eens eerder gezien en toen werd er al gezegd dat je maar een naar de faq moet kijken bij reguliere expressies


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

aha.. parse_url werkt dus ook met:

bla bla tekst 123.123.3.3 tekst bla

?

Niet dus

ff getest:

PHP:
1
2
3
$url = 'bla bla bla 123.13.12.12 la bjks';

print_r(parse_url($url));


levert:

Array
(
[path] => bla bla bla 123.13.12.12 la bjks
)

*insert signature here


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

TjarkVerhoeven schreef op 05 augustus 2002 @ 14:39:
aha.. parse_url werkt dus ook met:

bla bla tekst 123.123.3.3 tekst bla

?
Neee... dat niet... maar de vraag van de TS was ook iets anders. ;)

Hij heeft een string met alleeen daarin een ftp adres. Hij heeft het niet over eruit filteren van een adres uit een lap text. Als hij dit wel bedoelt moet hij zijn vraag beter stellen en voorbeelden duidelijker opmaken. :Y)


Stiekem tekst toevoegen als ik aan het posten ben..... :|

[ Voor 0% gewijzigd door LuCarD op 05-08-2002 14:46 . Reden: nix bizonders ]

Programmer - an organism that turns coffee into software.


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

nou dit:

ip : 123.123.123.123 user: ik pass: ben port: 12

ziet er niet uit als 'alleen daarin een ftp adres'
Stiekem tekst toevoegen als ik aan het posten ben.....
hih, sorry, had 't ff getest en vond het niet de moeite waard om er een nieuwe post van te maken :)

*insert signature here


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

TjarkVerhoeven schreef op 05 augustus 2002 @ 14:46:
nou dit:

ip : 123.123.123.123 user: ik pass: ben port: 12

ziet er niet uit als 'alleen daarin een ftp adres'
Dat wil hij toch geven als uitvoer?

of hebbe ik het mis?

Programmer - an organism that turns coffee into software.


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

De string met het ip kan er telkens anders uitzien: bv
je gaat helaas niet door voor de kleurenmagnetron ;)

*insert signature here


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

TjarkVerhoeven schreef op 05 augustus 2002 @ 14:49:
[...]

je gaat helaas niet door voor de kleurenmagnetron ;)
Ik doe het wel even met mijn zwart-wit magnetron... :)

Programmer - an organism that turns coffee into software.


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
PHP:
1
2
3
4
$string = $ip_string;  
if (preg_match('/(^|\b)([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/',$string,$reg)) {  
   $ip = $reg[2];  
}

Dit is volgens mij de netste oplossing.

Verwijderd

Topicstarter
bedankt voor all hulp, het werkt nu wel....

en het is inderdaad een string met vanalles erin, en niet alleen een ftp adres ;)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 26-08 21:52
Verwijderd schreef op 05 augustus 2002 @ 11:56:
Ok ik heb het volgende probleem,

ik heb een string en daar staat ergens een ip in.
Maar nu wil ik alleen dat ip in een nieuwe string hebben....

De string met het ip kan er telkens anders uitzien: bv

ik:ben@123.123.123.123:12
123.123.123.123
ip : 123.123.123.123 user: ik pass: ben port: 12
waar zou 'ie dat toch voor gaan gebruiken O-)

  • Grum
  • Registratie: Juni 2001
  • Niet online
En al deze regexes matchen ook 999.999.999.999 ... goed zeg :P

  • Blubber
  • Registratie: Mei 2000
  • Niet online
klopt, daar had men blijkbaar ff niet aan gedacht he, maarja, niemand is perfect :)

Verwijderd

Topicstarter
Maar Grum, dat maakt niet uit.....
Het zou beter zijn als ie dat niet deed... maar er zitten toch niet datsoort getallen in ;)

Verwijderd

Is deze regex eigenlijk wel ipv6 compatible? Of moet je daar weer een nieuwe regex voor bouwen? En kun je die dan in 1 regex combineren? :+

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
IPv6 format volgens Linux IPv6 HOWTO:


A usable address (see address types later) is e.g.:

3ffe:ffff:0100:f101:0210:a4ff:fee3:9566


For simplifications, leading zeros of each 16 bit block can be omitted:

3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 ->
¬ 3ffe:ffff:100:f101:210:a4ff:fee3:9566


One sequence of 16 bit blocks containing only zeroes can be replaced with "::". But not more than one at a time, otherwise it is no longer a unique representation.

3ffe:ffff:100:f101:0:0:0:1 -> 3ffe:ffff:100:f101::1


The biggest reduction is seen by the IPv6 localhost address:

0000:0000:0000:0000:0000:0000:0000:0001 -> ::1

Daar moet je dus weer een nieuw reg. expression voor bouwen :)

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 04-08 13:06

GraasGast

Analogue Heaven

stekkel schreef op 05 augustus 2002 @ 15:09:
[lap code met dit:]
/(^|\b)([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/
Dit is volgens mij de netste oplossing.
ik vind deze netter:

code:
1
/([\d]{1,3}\.){3}[\d]{1,3}/

:P

edit: of nog netter:
code:
1
/(\d{1,3}\.){3}\d{1,3}/

[ Voor 0% gewijzigd door GraasGast op 06-08-2002 10:59 . Reden: layout fuckup ]


  • Grum
  • Registratie: Juni 2001
  • Niet online
IPv4
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/
(
   (
      \d    # 0-9
   |
      1?[1-9]\d # 10-199
   |
      2[0-4]\d   # 200-249
   |
      25[0-5]    # 250-255
   )
   \.
){3}
(\d|1?[1-9]\d|2[0-4]\d|25[0-5])
/


en IPv6 is wat kutter

code:
1
2
3
4
5
6
7
8
/
(
   (
      [\da-f]{1,4}
   )
   :
){0,7}
[\da-f]{1,4}


Met een splitcheck op '::'om te checken dat er niet meer dan 1 voorkomt.

Deze splitcheck zou volges mij al icm met de perlregex patterns
code:
1
2
3
(?{ ..... })
en
(?( ... ) ... | ... )


Zie http://www.perldoc.com/perl5.6.1/pod/perlre.html

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 04-08 13:06

GraasGast

Analogue Heaven

Grum schreef op 06 augustus 2002 @ 09:04:
IPv4
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/
(
   (
      \d    # 0-9
   |
      1?[1-9]\d # 10-199
   |
      2[0-4]\d   # 200-249
   |
      25[0-5]    # 250-255
   )
   \.
){3}
(\d|1?[1-9]\d|2[0-4]\d|25[0-5])
/

[...]
klopt net niet...de geldige waardes van een ip zijn 1-255.0-255.0-255.1-255

deze is wel goed:

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


maar als geldigheid je niet boeit blijft dit de leukste:

code:
1
/(\d{1,3}\.){3}\d{1,3}/

  • Grum
  • Registratie: Juni 2001
  • Niet online
Sorry hoor .. maar 0.0.0.0 is ook een valid ip adres .. loopback ? >:)

code:
1
2
3
4
5
[pluis] ~> ping 0
PING 0 (0.0.0.0): 56 data bytes
64 bytes from x95.x90.x41.x01: icmp_seq=0 ttl=255 time=11.359 ms
64 bytes from x95.x90.x41.x01: icmp_seq=1 ttl=255 time=10.552 ms
etc etc etc

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 04-08 13:06

GraasGast

Analogue Heaven

Grum schreef op 06 augustus 2002 @ 11:04:
Sorry hoor .. maar 0.0.0.0 is ook een valid ip adres .. loopback ? >:)
de uitzondering bevestigd de regel :Y)

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 04-08 13:06

GraasGast

Analogue Heaven

oops |:(

[ Voor 0% gewijzigd door GraasGast op 06-08-2002 11:10 . Reden: Dohhh...dubbel? ]

Pagina: 1