Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_replace, problem z wyrażeniem regularnym
Forum PHP.pl > Forum > Przedszkole
NieNerd
Witam, mam sobie coś takiego
Kod
$string='blablabla
[div]<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gNeZKE0AqB0&hl=pl_PL&fs=1&color1=0x234900&color2=0x4e9e00"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/gNeZKE0AqB0&hl=pl_PL&fs=1&color1=0x234900&color2=0x4e9e00" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>[/div]blablabla' //czyli po prostu link z youtube
$string=preg_replace('/\[div\](.*)\[\/div\]/','[...]',$string);

i to mi się nie chce podmieniać, dla porównania, poniższy przykład działa:
Kod
$string='blablabla[div]<img src="skyline.jpg">[/div]blablabla';
$string=preg_replace('/\[div\](.*)\[\/div\]/','[...]',$string);
piotrooo89
ale co chcesz otrzymać? bo nie jest to zbyt jasne. i proszę o odpowiednie bbcode.
NieNerd
w obu przypadkach w stringu ma być 'blablabla[...]blablabla'
piotrooo89
no ale właśnie taki wynik dostaje.
NieNerd
Nie żebym podważał autorytet, ale:
http://ideone.com/X1TkSVkv
czy ja coś sknociłem?
DiH
A jakby tak po ludzku? Co z podanego stringa konkretnie chcesz wyciągnąć?

Przetestuj na http://xrg.es
piotrooo89
właśnie przetestowałem i z takiego:

  1. $string='blablabla
  2. [div]<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gNeZKE0AqB0&hl=pl_PL&fs=1&color1=0x234900&color2=0x4e9e00"></param><param name="allowFullS
  3. creen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/gNeZKE0AqB0&hl=pl_PL&fs=1&color1=0x234900&color2=0x4e9e00" t
  4. ype="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>[/div]blablabla';
  5. $s=preg_replace('/\[div\](.*)\[\/div\]/','[...]',$string);
  6. print_r($s);


dostaje:

Kod
blablabla [...]blablabla


więc nie wiem w czym problem.
thek
Nie wiem czy zauważyłeś piotroo, ale nawet na wspomnianej xrg.es do momentu gdy nie usuniesz znaków przejścia do kolejnej linii to nie waliduje się prawidłowo. To samo z użyciem Regular Expression Editora jakiego używam. Wygląda więc na to, że zapis (.*) nie przyjmuje znaków końca linii i stąd nie dopasowuje wyrażenia. Trochę to dziwne, ale albo mój edytor wyrażeń coś knoci, albo faktycznie ten zapis uważa znaki ENTERa za nie pasujący do wzorca (.*) i bądź tu mądry winksmiley.jpg
DiH
  1. $string = 'blablabla
  2. [div]
  3. <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gNeZKE0AqB0&hl=pl_PL&fs=1&color1=0x234900&color2=0x4e9e00"></param><param name="allowFullS
  4. creen" value="true"></param><param name="allowscriptaccess" value="always"></param>
  5. <embed src="http://www.youtube.com/v/gNeZKE0AqB0&hl=pl_PL&fs=1&color1=0x234900&color2=0x4e9e00" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>[/div]blablabla';
  6. $string = preg_replace("#(\n)#","",$string);
  7. preg_match('#\[div\](.*)\[\/div\]#', $string, $matchs);

Ciekawa sprawa z tymi enterami. Poległem próbując obejść to w inny sposób.
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.