Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyciąganie danych ze stringa pomiędzy znakami
Forum PHP.pl > Forum > Przedszkole
majesgrudziadz
Witam mam taki problem.

Pobieram informację z nazwy pliku które różnią się długością.
Przykłady plików:

20120803_0854_ussr-KV-5_23_westfeld.wotreplay
20120803_0921_usa-T30_28_desert.wotreplay
20120726_0816_usa-T28_Prototype_41_westfeld.wotreplay
20120802_1344_ussr-T_50_2_38_mannerheim_line.wotreplay

robę na nazwie pliku explode i wyciągam $row[0] i $row[1]

  1. $row[0] - data
  2. $row[1] - godzina


liczę ilość $row i wyciągam ostatniego w przypadku gdy jest to line itp to wyciągam dodatkowo przedostatniego co daje mi:
$row[ostatni] - nazwa mapy
$row[przedostatni] - nazwa mapy

Fragment kodu:
  1. $plik_nazwa = $_FILES['plik']['name']; //dodaje nazwe do zmiennej
  2.  
  3. $roz = explode(".",$plik_nazwa); // wycinam rozszerzenie pliku
  4. $opis_pliku = explode("_",$roz[0]); //dziele opis pliku wg podkreslnika
  5.  
  6. $ile = count($opis_pliku); // licze ile jest explodow
  7. $ileminus = $ile - 1; // odejmuje 1 by byl to ostatni gdyz liczy od 1 w gore a explode daje do tablicy od 0 w gore
  8. $mapa = $opis_pliku[$ileminus]; // wyciagam ostatni explode
  9.  
  10. if(($mapa == 'a') OR ($mapa == 'ridge') OR ($mapa == 'bay') OR ($mapa == 'river') OR ($mapa == 'coast') OR ($mapa == 'halluf') OR ($mapa == 'region') OR ($mapa == 'pass') OR ($mapa == 'oaks') OR ($mapa == 'line')){
  11. $ileminus2 = $ile - 2;
  12. $mapa2 = $opis_pliku[$ileminus2];
  13.  
  14. $mapaw = $mapa2.' '.$mapa;
  15. }else{
  16. $mapaw = $mapa;
  17. }


Teraz problem leży w nazwie czołgu gdyż ma on przeróżne nazwy. Chciałbym wyciągnąć z nazwy pliku znaki które znajdują się po pierwszym znaku - a kończą się przed znakami "cyfra,cyfra,podkreślnik"


Czy może ktoś mi podpowiedzieć jak to zrobić ? czytałem manuale itp ale nie mogę sobie poradzić gdyż scrypty php ostatni raz pisałem 6 lat temu smile.gif

Z góry dziękuję za odpowiedzi nie odsyłające mnie do www.google.pl
nospor
Tu idealnie nadają się wyrażenia regularne
b4rt3kk
To bardzo prosta sprawa, musisz użyć preg_split, oczywiście z odpowiednim wyrażeniem regularnym.
nospor
Nie preg_split a preg_match. Autor wątku chce wyciągnąć srodek
majesgrudziadz
wszystko fajnie pięknie poczytałem o preg_match() ale chyba jestem za tempy smile.gif

mogę prosić o jakiś przykład z sensownym opisem ?
nospor
Cytat
tempy

tępy
smile.gif
majesgrudziadz
Cytat(nospor @ 19.09.2012, 11:18:47 ) *
tępy
smile.gif


Tak wiem celowo to napisałem aby podkreślić fakt iż nie mogę sobie poradzić ... zaczynam kombinować z str_replace('JAKIES ZNAKI',''>',$opis_pliku); ale nie wiem cyz ide w dobrym kierunku
b4rt3kk
  1. $string = '20120803_0854_ussr-KV-5_23_westfeld.wotreplay';
  2.  
  3. preg_match("/-.*\_[0-9]{2}/", $string, $matches);
  4.  
  5. print_r($matches);
nospor
Cytat
ale nie wiem cyz ide w dobrym kierunku
No nie idziesz w dobrym kierunku. Napisaliśmy ci, że najlepszym kierunkiem są wyrażenia regularne oraz preg_match().
majesgrudziadz
Cytat(b4rt3kk @ 19.09.2012, 11:26:33 ) *
  1. $string = '20120803_0854_ussr-KV-5_23_westfeld.wotreplay';
  2.  
  3. preg_match("/-.*\_[0-9]{2}/", $string, $matches);
  4.  
  5. print_r($matches);


Sprawdzałeś to co mi podałeś ?

Ja byłem ciekaw co twój kod pokaże ... hmm pokazał blank page

Zacząłem kombinować ze splitem dlatego, że mój przykład również zwracał czystą stronę
b4rt3kk
Cytat(majesgrudziadz @ 19.09.2012, 11:36:35 ) *
Sprawdzałeś to co mi podałeś ?

Ja byłem ciekaw co twój kod pokaże ... hmm pokazał blank page

Zacząłem kombinować ze splitem dlatego, że mój przykład również zwracał czystą stronę


Tak sprawdzałem, może wsadź to pomiędzy <?php ... ?> ? smile.gif
Kshyhoo
  1. <?php
  2.  
  3. $subject = "20120803_0854_ussr-KV-5_23_westfeld.wotreplay";
  4. $pattern = '/-.*\_[0-9]{2}/';
  5. preg_match($pattern, $subject, $matches);
  6. print_r($matches);
  7.  
  8. ?>

Cytat
Array ( [0] => -KV-5_23 )

Więc działa smile.gif
majesgrudziadz
Cytat(b4rt3kk @ 19.09.2012, 11:38:27 ) *
Tak sprawdzałem, może wsadź to pomiędzy <?php ... ?> ? smile.gif



Za głupka mnie uważasz ? heh dobre to było ... ale nie działa może mój serwer coś nie trybi pod względem PHP.5.0.3 ?
konole
Cytat(majesgrudziadz @ 19.09.2012, 09:53:30 ) *
Za głupka mnie uważasz ?
tak, innym działa.
majesgrudziadz
Cytat(Kshyhoo @ 19.09.2012, 11:42:42 ) *
  1. <?php
  2.  
  3. $subject = "20120803_0854_ussr-KV-5_23_westfeld.wotreplay";
  4. $pattern = '/-.*\_[0-9]{2}/';
  5. preg_match($pattern, $subject, $matches);
  6. print_r($matches);
  7.  
  8. ?>


Więc działa smile.gif


No faktycznie działa .... w twoim jak i w moim kodzie miałem błąd smile.gif

ale problem polega na tym że pierwszy znak minusa również musi uciąć ... ale to już sobie poradzę

moim problemem i błędem było to że nie dawałem w preg_match $wynik u ciebie $matches na końcu nigdzie nie doczytałem do czego to jest a teraz już wiem smile.gif
człowiek uczy się na błędach dobrze że te błedy rozumie wink.gif

na końcu zamiast print_r dałem echo $wynik[0]; i jest gitarka

pozdro

temat do zamknięcia


Cytat(konole @ 19.09.2012, 12:09:33 ) *
tak, innym działa.


sam jesteś głupek ... ludzi nie obrażaj człowieku .... a mogę nazwać cię debilem ? gdyż nic nowego ani sensownego do tematu nie wniosłeś ?



Kshyhoo - oczywiście kliknąłem POMÓGŁ
b4rt3kk
A ja to nie pomogłem? Identyczny przykład dałem. lol. biggrin.gif
Kshyhoo
Cytat(b4rt3kk @ 19.09.2012, 13:15:24 ) *
A ja to nie pomogłem? Identyczny przykład dałem. lol. biggrin.gif

Mam zadatki na polityka, umiem przywłaszczać sobie czyjeś zasługi specool.gif
nospor
majesgrudziadz również nadaje się na polityka - nie widzi od kogo idą dobre idee, przez co nie nagradza tych co trzeba tylko rozdaje stołki kolesiom wink.gif

Na szczęście mamy prezesa (mnie) który sprowadzi do parteru złych polityków biggrin.gif
majesgrudziadz
Cytat(b4rt3kk @ 19.09.2012, 13:15:24 ) *
A ja to nie pomogłem? Identyczny przykład dałem. lol. biggrin.gif


Żeby było śmieszniej smile.gif dałem tobie a nie Kshyhoo smile.gif

Tzn dałem b4rt3kk a napisałem że dałem Kshyhoo smile.gif

Teraz macie oboje smile.gif

Pozdrawiam
nospor
Cytat
Żeby było śmieszniej dałem tobie a nie Kshyhoo

Tzn dałem b4rt3kk a napisałem że dałem Kshyhoo
No właśnie nie.... przeczytaj parę ostatnich postów, w szczególności mój a następnie wyciągnij wnioski co się mogło stać... wink.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.