Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_match
Krisu
post 30.01.2008, 16:07:03
Post #1





Grupa: Zarejestrowani
Postów: 211
Pomógł: 0
Dołączył: 30.03.2006
Skąd: Żary

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


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?

Ten post edytował Krisu 30.01.2008, 19:06:00
Go to the top of the page
+Quote Post
xbigos
post 30.01.2008, 16:26:18
Post #2





Grupa: Zarejestrowani
Postów: 239
Pomógł: 27
Dołączył: 13.07.2005
Skąd: Jarocin

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


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. ?>


Ten post edytował xbigos 30.01.2008, 16:30:44


--------------------
Go to the top of the page
+Quote Post
Krisu
post 30.01.2008, 16:34:46
Post #3





Grupa: Zarejestrowani
Postów: 211
Pomógł: 0
Dołączył: 30.03.2006
Skąd: Żary

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


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.
Go to the top of the page
+Quote Post
gutek84
post 30.01.2008, 16:36:14
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 9.10.2007
Skąd: Morąg

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


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. ?>


Ten post edytował gutek84 30.01.2008, 16:38:06
Go to the top of the page
+Quote Post
Krisu
post 30.01.2008, 16:41:33
Post #5





Grupa: Zarejestrowani
Postów: 211
Pomógł: 0
Dołączył: 30.03.2006
Skąd: Żary

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


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
Go to the top of the page
+Quote Post
gutek84
post 30.01.2008, 16:52:18
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 9.10.2007
Skąd: Morąg

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


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. ?>
Go to the top of the page
+Quote Post
Krisu
post 30.01.2008, 16:54:55
Post #7





Grupa: Zarejestrowani
Postów: 211
Pomógł: 0
Dołączył: 30.03.2006
Skąd: Żary

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


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
Go to the top of the page
+Quote Post
gutek84
post 30.01.2008, 17:06:33
Post #8





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 9.10.2007
Skąd: Morąg

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


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

Ten post edytował gutek84 30.01.2008, 17:13:56
Go to the top of the page
+Quote Post
Krisu
post 31.01.2008, 16:59:49
Post #9





Grupa: Zarejestrowani
Postów: 211
Pomógł: 0
Dołączył: 30.03.2006
Skąd: Żary

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


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

Ten post edytował Krisu 30.01.2008, 17:20:25
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: 19.07.2025 - 08:35