Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]preg_match i ipv4
Viters
post 14.02.2012, 11:19:04
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 24.08.2009
Skąd: Głowno

Ostrzeżenie: (0%)
-----


Cześć. Nie mam już siły do wyrażeń regularnych :<

  1. <?php
  2.  
  3. $tekst = file_get_contents('wikipedia.txt');
  4.  
  5. $pattern = '[" \.,!\?;\):]{1}(\d{1,2}|1\d\d|2[0-5][0-5])\.(\d{1,2}|1\d\d|2[0-5][0-5])\.(\d{1,2}|1\d\d|2[0-5][0-5])\.(\d{1,2}|1\d\d|2[0-5][0-5])';
  6. preg_match($pattern, $tekst, $match);
  7.  
  8. count($match);
  9.  
  10. ?>


W regexp.pl działa, po uruchomieniu na serwerze wyrzuca błąd:
Warning: preg_match() [function.preg-match]: Unknown modifier '(' on line 6

Zawartość pliku txt:
Cytat
Adres ip to 192.168.12.33 oraz 222.254.1.1. Nieprawidlowym adresem jest np.
256.222.11.1, 225.300.25.95 i 225.25.455.95.


Jeszcze raz proszę was o pomoc. Z góry dzięki.
Pozdrawiam.


--------------------

God is wearing black

Go to the top of the page
+Quote Post
wookieb
post 14.02.2012, 11:21:05
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://php.net/filter_var
http://www.php.net/manual/en/filter.filters.validate.php -> FILTER_VALIDATE_IP -> FILTER_FLAG_IPV4


--------------------
Go to the top of the page
+Quote Post
Viters
post 14.02.2012, 11:33:00
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 24.08.2009
Skąd: Głowno

Ostrzeżenie: (0%)
-----


Zwróci mi to wyniki z tekstu? Zresztą wolałbym raczej ogarnąć te wyrażenia.


--------------------

God is wearing black

Go to the top of the page
+Quote Post
erix
post 14.02.2012, 12:25:38
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A czy klawiatura odgryzie Ci palce, jeśli spróbujesz?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
by_ikar
post 14.02.2012, 13:15:00
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Zacznijmy od tego że wyrażenie należy osadzić między jakimiś dwoma znakami, dość często są to slashe, płotki (#), czy nawet małpy. Nie użyłeś żadnego takiego znaku, to ci wywala błąd. Druga sprawa, to twoje wyrażenie, jeżeli szukasz jakiegokolwiek adresu IP, to możesz to zrobić w prostszy sposób:

  1. <?php
  2.  
  3. $str = '192.168.1.1 ';
  4.  
  5. preg_match('/([\d]{1,3}.[\d]{1,3}.[\d]{1,3}.[\d]{1,3})/', $str, $matches);
  6.  
  7. echo '<pre>'.print_r($matches, true).'</pre>';


Lub bardziej zaawansowane pomijające przykładowo adresy lokalne (127/168/ itp):


  1. <?php
  2.  
  3. $str = '77.254.171.90 ';
  4.  
  5. preg_match('/((([\d]{1,3})(?<!127|10|255)\.([\d]{1,3}))(?<!169.254|192.168|172.(1[6-9]|2[0-9]|3[0-1]))\.([\d]{1,3}))(?<!192.0.2)\.([\d]{1,3})/', $str, $matches);
  6.  
  7. echo '<pre>'.print_r($matches, true).'</pre>';


Ale IMO lepiej jest użyć gotowych funkcji, jakie wyżej moi przedmówcy podali.
Go to the top of the page
+Quote Post
Viters
post 14.02.2012, 14:17:52
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 24.08.2009
Skąd: Głowno

Ostrzeżenie: (0%)
-----


Bardzo dziękuję na pomoc. Działa tak, jak powinno. Przy okazji - wytłumaczę się - by_ikar, twój algorytm pokazuje liczby w zakresie 0-999, ja niestety potrzebuję 0-255. Oczywiście, podzielam wasze zdanie jeżeli chodzi o używanie gotowych funkcji, zamiast męczenia się z czymś takim, jednak to jest raczej "ćwiczenie" z wyrażeń regularnych, dlatego zależało mi na rozwiązaniu związanym z nimi.

Jeszcze raz dziękuję i pozdrawiam.


--------------------

God is wearing black

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 4.06.2024 - 04:18