Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z wyrażeniem regularnym
Forum PHP.pl > Forum > Przedszkole
czernin
Witam,

Proste wyrażenie regularne:

  1. #src="(.+?[.]swf)"#


Wyciąga z <embed src="http://link.pl/a.swf" /> zawartość src="", czyli http://link.pl/a.swf. Próbowałem przekształcić wyrażenie tak, aby wyciągało też zawartość data="" - jeżeli jest. próbowałem:

  1. #src|data="(.+?[.]swf)"#


Tylko, że takie wyrażenie nie działa jak należy. Jak więc je przerobić, aby wyciągało zarówno src="" i data="" ?
!*!
Umieść src i data w grupie.
  1. '/(src|data)="([a-z0-9\/\.\:]+)"/'
czernin
Wszystko byłoby dobrze, tylko, że chodzi o to aby wyrażenie zwróciło /(src|data)="([a-z0-9\/\.\:]+)"/ , a nie /(src|data)="([a-z0-9\/\.\:]+)"/
!*!
I zwraca, użyj preg_match_all
czernin
Mój skrypt wygląda tak:

  1. <?php
  2.  
  3. $zrodlo_strony = file_get_contents('http://www.naprzerwie.pl/naprzerwie/1,89385,12894076,Wyscigi_brytyjskich_autobusow.html');
  4. preg_match_all('/(src|data)="([a-z0-9\/\.\:]+)"/', $zrodlo_strony, $out, PREG_SET_ORDER);
  5. echo $out[0][1];
  6.  
  7. ?>


I $out[0][1] zwraca "src" zamiast zawartość samego src=""
!*!
A mój tak i jest ok:
  1. <?php
  2. $text = '<embed src="http://link.pl/a.swf" data="asdasd" />';
  3. preg_match_all('/(src|data)="([a-z0-9\/\.\:]+)"/', $text, $match);
  4. echo '<pre>';
  5. print_r($match);
  6. ?>


Cytat
Array
(
[0] => Array
(
[0] => src="http://link.pl/a.swf"
[1] => data="asdasd"
)

[1] => Array
(
[0] => src
[1] => data
)

[2] => Array
(
[0] => http://link.pl/a.swf
[1] => asdasd
)

)


Z debuguj to sobie na tej samej zasadzie i odwołaj się odpowiednio do tablicy.
czernin
Tylko, że nie chodzi o to, że w jednym embed / object / iframe są dwie wartości. Co w przypadku, gdy $text =

Kod
<object data="http://bi.gazeta.pl/ogl/adv/upload_cms/a/1/18/05faf508ab.swf" />


? (w pierwszym poście źle się wyraziłem..)
!*!
To dopisz sobie znak którego brakuje w wyrażeniu, czyli _
czernin
W którym miejscu dokładnie dodać ten znak?
!*!
Cytat(czernin @ 23.11.2012, 18:13:21 ) *
Wszystko byłoby dobrze, tylko, że chodzi o to aby wyrażenie zwróciło /(src|data)="([a-z0-9\/\.\:]+)"/ , a nie /(src|data)="([a-z0-9\/\.\:]+)"/

W którym miejscu dokładnie dodać ten znak?

Z tego z którego chcesz wyciągnąć dane.
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.