mad182 Posted January 13, 2010 Report Share Posted January 13, 2010 Šeit ir saīsināts koda fragments, kurš tekstā ievietotu youtube linku aizstāj ar "embed" objektu, kopā ar linku. Gribētos zem šī objekta parādīt arī video nosaukumu html'ā, garumu, varbūt vēl kaut ko. Principā to izdarīt ar YT api ir elementāri, tikai saskāros ar problēmu, ka nesanāk neko izdarīt ar "$4", kas ir video ID. Piemēram ieliekot to iekš substr('$4',0,2) gala rezultātā tā pat tiek izvadīta vērtība visā garumā. Cik saprotu, šie mainīgie iekš preg_replace nav mainīgie PHP izpratnē, un php kods tur netiek izpildīts, bet tālāk arī netieku, jo par regulārajām izteiskmēm man ir visai tumša bilde un manuālī kaut kā nesanāk atrast to, ko vajag. Tik tālu strādā: echo preg_replace("#(^|[\n ]|<a(.*?)>)http://(www\.)?youtube\.com/watch\?v=([a-zA-Z0-9\-_]+)(</a>)?#im",'Video ID ir $4', $text); Būtībā tas, kā es gribētu, lai tas strādātu ir: echo preg_replace("#(^|[\n ]|<a(.*?)>)http://(www\.)?youtube\.com/watch\?v=([a-zA-Z0-9\-_]+)(</a>)?#im",'Video nosaukums ir '.dabut_video_nosaukumu($4), $text); Attiecīgi funkcija dabut_video_nosaukumu() teorētiski atgriež video nosaukumu no API, ja tai padots video ID. Bet acīmredzot to šādi nevar izdarīt. Vai ir kādi padomi? Ko es daru nepareizi? Quote Link to comment Share on other sites More sharing options...
endrju Posted January 13, 2010 Report Share Posted January 13, 2010 Lieto 'e' (PREG_REPLACE_EVAL) modifier. Quote Link to comment Share on other sites More sharing options...
mad182 Posted January 13, 2010 Author Report Share Posted January 13, 2010 Vari lūdzu pateikt arī, kā to e parametru ir jānorāda konkrētajā gadījumā? Uzgooglēju piemērus, bet visur ir tādi pavisam elementāri ar vienu mainīgo un /e vienkārši galā pieliktu. Piemēri darbojas, bet lai kā es mēģinātu to e iebarot šeit, kaut kas nesanāk. Nav īsti pārliecības kur vinu jāliek ar visiem tiem "#" un tamlīdzīgi. Regulārās izteiksmes man vispār izskatās pēc ķerburu rindas :/ Quote Link to comment Share on other sites More sharing options...
endrju Posted January 13, 2010 Report Share Posted January 13, 2010 Vari lūdzu pateikt arī, kā to e parametru ir jānorāda konkrētajā gadījumā? Uzgooglēju piemērus, bet visur ir tādi pavisam elementāri ar vienu mainīgo un /e vienkārši galā pieliktu. Piemēri darbojas, bet lai kā es mēģinātu to e iebarot šeit, kaut kas nesanāk. Nav īsti pārliecības kur vinu jāliek ar visiem tiem "#" un tamlīdzīgi. Regulārās izteiksmes man vispār izskatās pēc ķerburu rindas :/ Pārveidojot Tavu kodu: function mad182($sID) { return '[' . substr($sID, 0, 2) . ']'; } $text = 'http://www.youtube.com/watch?v=D_FxNaD8fDs'; echo preg_replace("#(^|[\n ]|<a(.*?)>)http://(www\.)?youtube\.com/watch\?v=([a-zA-Z0-9\-_]+)(</a>)?#ime", 'mad182(\\4)', $text); P.S. Tava regulārā ekspresija neķers visus youtube URL pareizi (ja aiz ID vēl kas ir). Iedomājies, ka URL ir youtube.com/watch?v=ID⊂=... Quote Link to comment Share on other sites More sharing options...
mad182 Posted January 13, 2010 Author Report Share Posted January 13, 2010 Paldies! Ideāli. Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted January 14, 2010 Report Share Posted January 14, 2010 Es drīzāk izmantotu šo - http://lv.php.net/manual/en/function.preg-replace-callback.php Bet, ka iekš preg_replace var jau callback izmantot, gan nezināju. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.