Jump to content
php.lv forumi

Regulārās izteiksmes mainīgie


mad182

Recommended Posts

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

Link to comment
Share on other sites

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 :/

Link to comment
Share on other sites

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⊂=...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...