[PHP] Pregi - link bez PDFa

0

Hey

mecze sie nad filtrem do linka
((((http[s]?):\/\/)|www\.)([\w\.-]+)\.(\w{2,6})([\w\/\.\?\=\-\&\,\%]{4,80})?)

ten powyższy dobrze wyszukuje adresy np.
http://domena.pl/katalog/plik.pdf
http://domena.pl/katalog/plik2.sdf
http://domena.pl/katalog/plik3.html

potrzebuję żeby wyszukiwał wszystkie prócz tych z zakończeniem .pdf

wiem że to miej wiecej wygląda tak - wysuzkaj wsyztko prócz .pdf
((?!\.pdf).)*

gdy robie wiec tak:
((((http[s]?):\/\/)|www\.)([\w\.-]+)\.(\w{2,6})((?!\.pdf)[\w\/\.\?\=\-\&\,\%]{4,80})?)

wyszukuje nadal z .pdf

0

Jeśli już, to (?!.pdf) na końcu a nie w środku wyrażenia.

0

tak też próbowałem niestety..
([\w\/\.\?\=\-\&\,\%]{4,80}(?!\.pdf))

0

Po przemyśleniu.. tak się nie da - tzn. pewnie można by zrobić takie wyrażenie, ale zwykłe wstawienie (?<!.pdf) spowoduje, że zamiast "www.adres.pl/katalog/plik.pdf" złapie "www.adres.pl/katalog/plik.pdf".

Sugeruję łapać wszystko, ale dodać parametr 'e' i sprawdzać w php czy nie ma ".pdf" na końcu.
Dodatkowo podrzucę Ci swój RegExp od URL, który ostatnio dość nieźle dopracowałem, ale jak chcesz, to sobie zmień na swój.

Wygląda to tak:

<?
$a = 'http://a.pl/c.txt
http://a.pl/c.pdf
https://a.pl/c.txt
https://a.pl/c.pdf
www.a.pl/c.txt
www.a.pl/c.pdf';

//złamałem wyrażenie na 2 linie by strony nie rozwalało - ale to musi być w jednej linii
$regexp = '@\b(?:(?:(?:news://|nntp://|telnet://|irc://|mms://|ed2k://|file://|about:|mailto:|xmpp:|https?://|ftp://)
(?:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|[^{}<>^|\'"`.\s]+\.?)+)|\b(?:www|ftp)\.(?:[^{}<>^|\'"`.\s]+\.?)+)(?:[/=#]|\b)@ie';

echo '<pre>' . preg_replace ($regexp, 'substr("\0",-4)==".pdf"?"\0":"[url]\0[/url]"', $a);
?>

Wynik:

[url]http://a.pl/c.txt[/url]
http://a.pl/c.pdf
[url]https://a.pl/c.txt[/url]
https://a.pl/c.pdf
[url]www.a.pl/c.txt[/url]
www.a.pl/c.pdf

Oczywiście [url] sobie zamień na - to tylko dla przykładu.
Kod nie obsługuje parametrów za .pdf, czyli linków typu "www.a.pl/plik.pdf?cos=123" ale to chyba nie szkodzi, bo wątpię, że takie masz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1