Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyrażenie regularne do łącz
no-scared
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 24.04.2008

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


Witam ponownie.

Otóż chciałbym zrobić sobie wyrażenie regularne wychwytujące wszystkie łącza (hrefy), ponieważ chce sprawdzac jakie łącza dają użytkownicy w komentarzach na mojej stronie i dodawać je do bazy, robiłem już ileś matchów jednak im bardziej starałem się poprawić, tym bardziej go niszczyłem i już kompletnie zaczął mi się mózg lansować.

$preg = preg_match_all('/<a.*href\s*=(?:\s*|\s*"|\s*\')([^\s>]+)(?:\s*?"|\s*?\'|\s*|\s*>)/i', $text, $url_list, PREG_PATTERN_ORDER);

Proszę o pomoc.

// EDIT

do moderatorow, musiałem usunąć BBCode, ponieważ forum mi docinało regexa

jakieś pomysły?

Ten post edytował no-scared 31.08.2008, 16:06:16
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Daron
post
Post #2





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 3.09.2007

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


http://www.google.pl/search?hl=pl&q=UR...+Google&lr=

?
Go to the top of the page
+Quote Post
em1X
post
Post #3





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


mózg może się lasować.. lansują się gwiazdy w telewizji

  1. <?php
  2. $match = preg_match_all('/<a.*?href="(.*?)".*?>.*?</a>/i', $text, $url_list);
  3. ?>


Ten post edytował em1X 31.08.2008, 22:33:28
Go to the top of the page
+Quote Post
no-scared
post
Post #4





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 24.04.2008

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


Cytat(em1X @ 31.08.2008, 23:26:33 ) *
mózg może się lasować.. lansują się gwiazdy w telewizji

  1. <?php
  2. $match = preg_match_all('/.*?</a>/i', $text, $url_list);
  3. ?>

em1X mialem podobnego regexa na samym początku, jednak co jeśli łącza będą takie:

<a href='costam'>łącze</a>
<a href=costam>łącze</a>
Go to the top of the page
+Quote Post
em1X
post
Post #5





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


możesz zrobić trzy oddzielne wyrażenia dla każdego przypadku.
Go to the top of the page
+Quote Post
delfinium
post
Post #6





Grupa: Zarejestrowani
Postów: 90
Pomógł: 6
Dołączył: 30.06.2007
Skąd: Zielona Góra

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


em1X: ale po co dla każdego przypadku osobno?

  1. <?php
  2. $match = preg_match_all('/<a.*?href=('|"|)(.*?)('|"|)>.*?</a>/i', $href, $url_list );
  3. ?>


to rozwala linki z pojedynczymi i podwójnymi "uszami" i te bez też

Ten post edytował delfinium 2.09.2008, 12:14:21
Go to the top of the page
+Quote Post
em1X
post
Post #7





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


jeden kij, btw Twój regexp nie złapałby linka w postaci: <a href=http://onet.pl title="cos"> więc małą modyfikację wypadałoby dodać

  1. <?php
  2. $match = preg_match_all('/<a.*?href=('|"|)(.*?)('|"|).*?>.*?</a>/i', $href, $url_list );
Go to the top of the page
+Quote Post
delfinium
post
Post #8





Grupa: Zarejestrowani
Postów: 90
Pomógł: 6
Dołączył: 30.06.2007
Skąd: Zielona Góra

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


faktycznie, z rozpędu zabrakło jednego .*?. dzięki za poprawkę
Go to the top of the page
+Quote Post
no-scared
post
Post #9





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 24.04.2008

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


jeszcze mały problem, bo już chce rozdać plusy, ale żeby do końca (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

regex em1X wyłapuje także takie przypadki:

http://php.sum1.pl/?kat=9&p=7" onFocus=blur(); class=link

nie wiem dokladnie czemu, bo na koncu linka jest cudzyslow a on pobiera dalej.

Próbowałem coś takiego:

'/<a.*?href=(?:\'|"|)(^"\'\s)*?(?:\'|"|)>.*?<\/a>/i'

ale mi wtedy nic nie pobiera...

Ten post edytował no-scared 2.09.2008, 14:36:54
Go to the top of the page
+Quote Post
Kicok
post
Post #10





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Wrzucałem już tu kiedyś podobne wyrażenie. Powinno łapać wszystkie adresy:
  1. <?php
  2.  
  3. $text = 'aaa <a alt="aaa" href="http://aaa.pl/aaa.html" title="aaa">aaa</a> aaa
  4.  bbb <a alt='bbb' href='http://bbb.pl/bbb.html' title='bbb'>bbb</a> bbb
  5.  ccc <a alt=ccc href=http://ccc.pl/ccc.html title=ccc>ccc</a> ccc';
  6.  
  7.  
  8. preg_match_all( '#<as[^>]*hrefs*=s*("|')?(.*?)(?(1)1.*?>|(?:s.*?>|>))(.*?)</a>#si', $text, $matches );
  9.  
  10. echo '<pre>';
  11. print_r( $matches );
  12. echo '</pre>';
  13.  
  14. ?>
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 21:35