Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenia regularne, usuwanie wszystkiego do pierwszej spacji
Michael2318
post 22.01.2013, 13:34:22
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
alegorn
post 22.01.2013, 13:45:36
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


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


Ten post edytował alegorn 22.01.2013, 13:46:52
Go to the top of the page
+Quote Post
Michael2318
post 22.01.2013, 13:59:58
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
aras785
post 22.01.2013, 14:32:12
Post #4





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

Ostrzeżenie: (0%)
-----


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


Ten post edytował aras785 22.01.2013, 14:35:56
Go to the top of the page
+Quote Post
Pawel_W
post 22.01.2013, 14:37:42
Post #5





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
Michael2318
post 22.01.2013, 14:48:49
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
alegorn
post 22.01.2013, 15:10:07
Post #7





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował alegorn 22.01.2013, 15:15:36
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2025 - 09:31