Coldfusion regex подстрока YouTube ID - PullRequest
1 голос
/ 16 июня 2011

Я пытаюсь получить идентификатор YouTube из ссылки, подобной этой;

<img src="http://img.youtube.com/vi/OZ3jyvM0jZc/2.jpg" alt="" />

Мне удалось только получить идентификатор, но фактически не получить его!

<cfset ytID = '<img src="http://img.youtube.com/vi/0Z3jyvM0jZc/2.jpg" alt="" />' />
#reReplace(referer,"(vi=?(\=|\/))([-a-zA-Z0-9_]+)|(vi=\/)([-a-zA-Z0-9_]+)", "\1", "one")#


Output: <img src="http://img.youtube.com/vi//2.jpg" alt="" />

RegEx не мой друг сегодня.Чего мне не хватает?

Спасибо!

Ответы [ 4 ]

1 голос
/ 16 июня 2011

Я думаю, что регулярное выражение может быть неправильным инструментом для этой работы.Как насчет использования списков?

 <cfset ytStr = '<img src="http://img.youtube.com/vi/0Z3jyvM0jZc/2.jpg" alt="" />'>
 <cfset ytID = ListGetAt(ytStr, 4, '/')>
1 голос
/ 16 июня 2011

Попробуйте с регулярным выражением:

vi\/([^\/]+) // 0Z3jyvM0jZc
1 голос
/ 16 июня 2011

Вам не нужно экранировать косую черту в шаблонах регулярных выражений CFML.Так что возьмите то, что есть у Маски, и используйте любой метод, который вы предпочитаете (оба они работают, только если строка действительно совпадает):

<code><cfset ytID = '<img src="http://img.youtube.com/vi/0Z3jyvM0jZc/2.jpg" alt="" />'>

<cfoutput>
<pre>
    <cfset sLenPos=REFind("/vi/([^/]+)", ytID, 1, "True")>
    #mid(ytID, sLenPos.pos[2], sLenPos.len[2])# == OZ3jyvM0jZc

    #reReplace(ytID,".*/vi/([^/]+)/.*", "\1")# == OZ3jyvM0jZc

Ключ к сохранению этогопросто использовать [^/]+ для соответствия одному или нескольким символам, которые не /

0 голосов
/ 16 июня 2011
    <cfset ytID = '<img src="http://img.youtube.com/vi/0Z3jyvM0jZc/2.jpg" alt="" />'>
    <cfset sLenPos=REFind("(vi=?(\=|\/))([-a-zA-Z0-9_]+)|(vi=\/)([-a-zA-Z0-9_]+)", ytID, 1, "True")>
<cfoutput>
    #mid(ytID, sLenPos.pos[1], sLenPos.len[1])#
</cfoutput>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...