Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wyrazenie regularne
Forum PHP.pl > Forum > Przedszkole
Esc
Witam, i prosze o pomoc. Wiem gdzie znalezc podpowiedzi, tutoriale ale poprostu nie moge tego zrozumiec. Bardzo prosze o pomoc.

  1. <?php
  2. $text = 'img src=image/abc/raad/karamba.jpg border=0';
  3. $text = preg_replace('/^img .*(w+.w{0,10}) *border=0$/', '1', $text1);
  4. ?>


to moje nieudolne proby. potrzebuje ze zmiennej $text wyciagnac wlasciwie tylko i wylacznie nazwe pliku w tym przypadku karamba.jpg

naprawde to jakas czarna magia dla mnie - siedze i czytam ale pojac nie moge - przy tym co tu widzicie jestem juz prawie blisko bo otrzymuje wynik a.jpg
dr_bonzo
Np. tak

  1. <?php
  2. $text = 'img src=image/abc/raad/karamba.jpg border=0';
  3. $text = preg_replace('/^img .*[^w](w+.w{0,10}) *border=0$/', '1', $text);
  4.  
  5. print( $text );
  6. ?>


dodane: [^\w], czyli znak "nieplikowy" ( / czy tez =) a potem cala nazwa pliku.


edit:
albo

  1. <?php
  2. $text = preg_replace('/^img .*?(w+.w{0,10}) *border=0$/', '1', $text);
  3. ?>

dodane ? za .*, [.*?] tzn eager mode regexpow, dobiera jak najkrotszy string, bo samo .* dlapie ci wszystko od src= az do przedostatniej litery przed kropka.
KCG
Nie lepiej użyć basename()?
Esc
dr_bonzo dzieki wielkie wlasnie o to mi chodzilo - niestety i tak nie moge pojac na czym to polega.

KCG - basename bylo by dobre juz o tym myslalem ale nie w tym przypadku. dzieki rowniez.
dr_bonzo
Co do greedy/non greedy: http://forum.php.pl/index.php?s=&showt...st&p=487510

A co do regexpow, pisac pisac, czytac manuala, ogladac przyklady, przez co poznasz standardowe "triki" ktore potem wykorzystujesz w roznych kombinacjach smile.gif


dodane: [^\w], czyli znak "nieplikowy" ( / czy tez =) a potem cala nazwa pliku.

Kod
/^img .*(w+.w{0,10}) *border=0$/

Domyslnie masz tryb greedy [zachlanny] - czyli * bierze tak duzo ile sie tylko da, rozpatrujac regexpa od tylu:
- border - jest
- rozszerzenie pliku: w{0,10} - jest
- masz blad tongue.gif, powinno byc \. [czyli znak kropki, a nie dowolny znak] - uhhh, to raczej mi poobcinalo backslashe przy edycji przed ., w i w
- w+ : co najmniej 1 litera, 1 znalazlo, "a",
- .* - ktore sie rozpycha jak najbardziej, przez co w+ zalapie TYLKO 1 litere

Kod
/^img .*[^w](w+.w{0,10}) *border=0$/

dodanie [^w] sprawi ze masz

...
- w+ : co najmniej 1 litera, 1 znalazlo, "karamba",
- NIElitera
- .* - ktore sie rozpycha jak najbardziej, az do ostatniej!!!! nielitery, tzn slash'a przed karabna
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.