Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne, usuwanie wszystkiego do pierwszej spacji
Forum PHP.pl > Forum > PHP
Michael2318
Napisałem sobie wyrażenie regularne, które zamienia mi automatycznie gołe linki z youtuba na filmy. Problem mam jednak taki, że chcę się zabezpieczyć przed linkami tego typu:

http://www.youtube.com/watch?v=O3vCcGy7oiA&testststes

Chodzi o pogrubiony fragment. Często ludzie siedzą na youtubie i w linkach są różne śmieci, które chciałbym po prostu usunąć. Obecnie film mi wyświetla, ale pod nim mam właśnie to co wyżej pogrubiłem, czyli:

|FILM|
&testststes

A chciałbym się pozbyć tych paści, dlatego właśnie pytanie - jak dopisać do tego wyrażenia:

  1. $message = preg_replace('|http(.?)://www\.youtube\.com/watch\?.*\bv=([0-9A-Za-z-_]{11})|', '<br><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/$2"></param><embed src="http://www.youtube.com/v/$2" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object><br>', $message);


Coś, co nie wyświetli/zlikwiduje mi wszystko co występuje po tych 11 znakach w linku z youtuba (wyżej podkreślone).
alegorn
parse_url
zerknij na to. mysle ze na podstawie tego uzyskasz wszystko co potrzebujesz.

od biedy explode tez da rade, i nie bedzie wcale wolniejsze od regexp
Michael2318
A samo wyrażenie regularne? Bo ta funkcja owszem, jest przydatna, ale w przypadku gdy ja chciałbym uzyskać dany fragment linku. A ja mam gdzieś co w tym linku jest, cokolwiek tam będzie, chciałbym to usunąć po prostu.
aras785
Może tak:
  1. <?php
  2. $message = 'http://www.youtube.com/watch?v=O3vCcGy7oiA&testststes';
  3. $message = preg_replace('|'.strstr($message,'&').'|','',$message);
  4. $message = preg_replace('|http(.?)://www\.youtube\.com/watch\?.*\bv=([0-9A-Za-z-_]{11})|', '<br><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/$2"></param><embed src="http://www.youtube.com/v/$2" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object><br>', $message);
  5. echo $message;
  6. ?>


Może tak?
  1. <?php
  2. functio zamien($cos) {
  3. return preg_replace('|'.strstr($cos,'&').'|','',$cos);
  4. }
  5. $message = preg_replace('|http(.?)://www\.youtube\.com/watch\?.*\bv=([0-9A-Za-z-_]{11})|', '<br><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/'.zamien($2).'"></param><embed src="http://www.youtube.com/v/'.zamien($2).'" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object><br>', $message);
  6. ?>
Pawel_W
zamień
  1. '|http(.?)://www\.youtube\.com/watch\?.*\bv=([0-9A-Za-z-_]{11})|'

na
  1. '|http(.?)://www\.youtube\.com/watch\?.*\bv=([0-9A-Za-z-_]{11})[^ ]?*|'

powinno śmigać
Michael2318
Paweł, niestety nie, ale ja też próbowalem w ten sposób i miałem ten bład:

Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 66 in
alegorn
uf, no a spróbowałeś explode?
  1. $tmp = explode('&',$url); //edit:literowka
  2. echo $tmp[0];


jest DOKŁADNIE tym co chcesz osiągnąć....

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