Autor | Zpráva | ||
---|---|---|---|
temistokles Profil |
#1 · Zasláno: 11. 6. 2008, 21:26:43
Ahoj,
mám nasledovný regáč: $text = ereg_replace('[^(href=|href="|(<a(.*)>))](((f|ht){1}tp://)[-a-zA-Z0-9@ :%_\+.~#?&//=]+)', '<a href="\\1" target="_blank">\\1</a>', $text); Mal by nahradiť výskyt URL adresy (v prípade, že už nie je odkazom) za odkaz. Funguje fajn, avšak zlyhá, ak sa pred samotnou adresou nenachádza biely znak :-(. Snažím sa to už nejakú dobu neúspešne riešiť. Vedel by niekto pomôcť? Vopred diki, Temi. |
||
Taps Profil |
#2 · Zasláno: 11. 6. 2008, 21:29:29
temistokles
zkus použít trim |
||
temistokles Profil |
#3 · Zasláno: 11. 6. 2008, 21:30:54
Taps
Trim ma medzier zbaví, avšak regáč zlyhá napríklad na: BlaBla<br>http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum =9&topic=76341 Teda v prípade, že medzera chýba. |
||
Joker Profil |
#4 · Zasláno: 11. 6. 2008, 22:17:16
temistokles
Asi to je neregulérní regulární výraz :o))) Ne, sice mi chvíli trvalo ho pochopit, ale selže vcelku logicky: '[^(href=|href="|(<a(.*)>))](((f|ht){1}tp://)[-a-zA-Z0-9@ :%_\+.~#?&//=]+)' Ten výraz přeci říká, že na začátku musí být něco, co není href=, href=" ani <a(cokoliv nebo nic)> a až potom následuje http nebo ftp. |
||
temistokles Profil |
#5 · Zasláno: 11. 6. 2008, 22:19:17
Keďže som dospel k názoru, že POSIX výrazy sú pažravé (greedy -- googlenie to povrdzuje), snažil som sa použiť preg_* výrazy, ale opäť som narazil na problém. Mám nasledujúci kód:
$text = preg_replace('`[^(href=|href=")]([<a(.*)>(.*)</a>|>])?((ftp|http)://[- a-zA-Z0-9@:%_\+.~#?&/=]+)`', '\\1<a href="\\2" target="_blank">\\2</a>', $text); Pre vstup s môjho predchodzieho príspevku to funguje _takmer_ fajn... Vráti to: BlaBla<br<a href="http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&to pic=76341" target="_blank">http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=76341http://diskuse.jakp…forum=9&topic=76341</a> Problém je teda v jednom chýbajúcom zobáčiku / väčšítku, ktoré tam za svet neviem dostať :(. Poradí niekto? |
||
temistokles Profil |
Joker
Hmm, to máš pravdu, skúsim to ešte trochu prekopať :). Edit: Keď tak nad tým uvažujem, nespĺňa aj "nič" to, že sa to nerovná href=", href=, <a (niečo)> ? :) Edit2: Tak podľa všetkého (niekoľkých testov), "nič" skutočne nie je niečo :-D. Každopádne ma riešenie zatiaľ nenapadá... |
||
peta Profil |
#7 · Zasláno: 12. 6. 2008, 08:33:14 · Upravil/a: peta
http://www.volny.cz/peter.mlich/www.htm#main7
v knihovne reg. vyrazu je nekoli takovych pro odkaz. Nebylo by jednodussi pouzit 2 vyrazy, kdy jednim nahradis vsechny 'a href=url' na 'url' a pak zpetne na odkazy? Ja jen, ze hledat v textu slozity vyraz, to je rychlejsi hledat 2 jednodussi. (f|ht){1}tp nebylo by jednodussi (ftp|http) |
||
temistokles Profil |
#8 · Zasláno: 12. 6. 2008, 11:01:35
Nebylo by jednodussi pouzit 2 vyrazy, kdy jednim nahradis vsechny 'a href=url' na 'url' a pak zpetne na odkazy? Ja jen, ze hledat v textu slozity vyraz, to je rychlejsi hledat 2 jednodussi.
Každopádne by som navrhovaným nahradením prišiel o informáciu v popiskoch odkazov (zachovali by sa mi len samotné adresy). To nie je práve žiadúca črta :). (f|ht){1}tp nebylo by jednodussi (ftp|http) Ani jeden zo spôsobov mi nepríde komplikovanejší :). Rýchlosť som netestoval, nepredpokladám, že by v nej však mal byť nejaký radikálny rozdiel... http://www.volny.cz/peter.mlich/www.htm#main7 v knihovne reg. vyrazu je nekoli takovych pro odkaz. Skúšal som toho pomerne hodne, každopádne sa neviem zbaviť toho problému, že za URL adresou sa musí nachádzať nejaký znak... |
||
lordfrikk Profil |
#9 · Zasláno: 12. 6. 2008, 11:23:46
Keďže som dospel k názoru, že POSIX výrazy sú pažravé (greedy -- googlenie to povrdzuje), snažil som sa použiť preg_* výrazy,...
I PCRE výrazy jsou defaultně greedy, tak nevím jak sis vlastně pomohl? |
||
temistokles Profil |
#10 · Zasláno: 13. 6. 2008, 14:55:52
I PCRE výrazy jsou defaultně greedy, tak nevím jak sis vlastně pomohl?
Pri PCRE to však nie je problém zmeniť :). Aspoň neviem o spôsobe, ako by to pre POSIX šlo... |
||
Časová prodleva: 16 let
|
0