Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_match
Forum PHP.pl > Forum > Przedszkole
Krisu
Czytałem manuala i szukałem w internecie sposobu wyciągnięcia fragmentu ciągu, ze środka za pomocą preg_match i jedyny przykład, który obrazuje, to co mam zamiar zrobić, to ten:

  1. <?php
  2. // get host name from URL
  3. preg_match('@^(?:http://)?([^/]+)@i',
  4. &#092;"http://www.php.net/index.html\", $matches);
  5. $host = $matches[1];
  6.  
  7. // get last two segments of host name
  8. preg_match('/[^.]+.[^.]+$/', $host, $matches);
  9. echo &#092;"domain name is: {$matches[0]}\n\";
  10. ?>


Jednak, próbowałem, go tak zmodyfikować by z poniższego ciągu wyciągnąć wartość Nick i Nick2.

Cytat
Temat: Nick wysłał wiadomość do Nick2


Jednak nie wiem na jakiej zasadzie mam umieszczać te znaki (/[^.]+\.[^.]+$/) by działało poprawnie.
Proszę o pomoc, chciałbym to przeanalizować i zrozumieć.

Lub inaczej, w jaki sposób mogę przypisywać do zmiennej część fragmentu ciągu, który będzie się zmieniał niezależnie ode mnie np, zostanie wprowadzany po przez formularz?
xbigos
http://pl.php.net/manual/pl/function.preg-match.php

albo zainteresuj się także eregi

http://pl.php.net/eregi
  1. <?php
  2. if(eregi('ciagZnakow', $twojaZmienna)){
  3. ...
  4. }
  5. ?>
Krisu
Cytat(xbigos @ 30.01.2008, 16:26:18 ) *
http://pl.php.net/manual/pl/function.preg-match.php

albo zainteresuj się także eregi

http://pl.php.net/eregi
  1. <?php
  2. if(eregi('ciagZnakow', $twojaZmienna)){
  3. ...
  4. }
  5. ?>


No tak, ale przecież nie przypiszę Nick do zmiennej $zmienna, bo w każdej chwili ten nick może się zmienić, a ja właśnie szukam sposobu, jak go wyłuskać z tego ciągu znaków.
gutek84
Nie wiem dokladnie czy o to ci chodzi ale ja bym to tak zrobil:

  1. <?php
  2. $pierwszy="user_name@host_name.pl";
  3. $pierwszy=explode("@", $pierwszy);
  4.  
  5. echo pierwszy[0];  //-> wyswietli user_name
  6. echo pierwszy[1];  //-> wyswietli host_name.pl
  7. ?>
Krisu
Przedstawię swój problem na konkretnym przykładzie.

Ciąg znaków:
Cytat
Temat: Village of Grimness zaatakował/a ADAMS


i teraz chciałbym przypisać wartości do zniennych.

Cytat
$zmienna1 = "Village of Grimness";
$zmienna2 = "ADAMS";


Zauważmy jednak, że te wartości się zmieniają... jedynymi stałymi są:

Cytat
Temat: oraz zaatakował/a
gutek84
Jak masz konkretny ciag znakow i zawsze wyglada tak samo to skorzystaj z explode. Tak jak napisalem wyzej tylko przypisz  odpowiednie wyniki do zmiennych np.
  1. <?php
  2. $tem='Temat: Village of Grimness zaatakował/a ADAMS';
  3. $tem=explode(" zaatakował/a ", $tem);
  4. $zmienna1=$tem[1]; //-> tutaj bedzie ADAMS
  5. $zmienna2=explode("Temat: ", $tem[0]); //-> tutaj bedzie Village of Grimness
  6. ?>
Krisu
W sumie to racja, nie pomyslalem o tym, bo skupiłem sie na funkcji preg_match smile.gif
Dzięki za pomoc, ale jeśli jeszcze wiesz jak zrobić to za pomocą w/w funkcji to byłbym wdzięczny smile.gif
gutek84
Nie wiem czemu sie uparles na preg_match! Jesli chcesz to jest taka metoda:


  1. <?php
  2. $str = 'hypertext language programming';
  3. $chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
  4. print_r($chars);
  5. ?> 
  6.  
  7. Powyższy przykład wyświetli:
  8.  
  9. Array
  10. (
  11. [0] => Array
  12. (
  13. [0] => hypertext
  14. [1] => 0
  15. )
  16.  
  17. [1] => Array
  18. (
  19. [0] => language
  20. [1] => 10
  21. )
  22.  
  23. [2] => Array
  24. (
  25. [0] => programming
  26. [1] => 19
  27. )
  28.  
  29. )
  30.  
  31. $zmienna1= $chars[0][0];
  32. $zmienna2= $chars[1][0];
  33. $zmienna3= $chars[2][0];


'/ /' - tu jest string lamiacy, mozesz wpisac cokolwiek, lecz nie sprawdzalem dla 2 rodzjow stringow w stringu, musisz pokombinowac!

explode jest najszypsza metoda do dzielenia stringa!

pozdrawiam
Krisu
Po prostu chiałem się nauczyć smile.gif
Co do Twojego przykładu, to drugiej zmiennej nie można tak przypisać, więc zrobiłem to trochę inaczej, ale działa:

  1. <?php
  2. $tem = 'Temat: Village of Grimness zaatakował/a ADAMS';
  3. $tem = explode(" zaatakował/a ", $tem);
  4. $zmienna1 = $tem[1]; //-> tutaj bedzie ADAMS
  5. $tem = $tem[0];
  6. $tem = explode("Temat: ", $tem); //-> tutaj bedzie Village of Grimness
  7. $zmienna2 = $tem[1];
  8.  
  9. echo "$zmienna1<br>";
  10. echo "$zmienna2<br>";
  11. ?>


Trochę na okrętkę. No i dzięki za to preg_match, napewno się przyda.
Pozdrawiam i dzięki za pomoc, zostawiam też punkt pomógł.

Chodziło mnie o takie rozwiązanie smile.gif

  1. <?php
  2. preg_match('/temat:([^>]*)zaatakował/a([^>]*)/si', $w, $wynik);
  3.  
  4. echo "$wynik[1]<br>";
  5. echo "$wynik[2]<br>";
  6. ?>


Co wreszcie daje zamierzony efekt smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.