Regex Coldfusion正则表达式子字符串YouTube ID

Regex Coldfusion正则表达式子字符串YouTube ID,regex,coldfusion,Regex,Coldfusion,我试图从这样的链接中提取youtube ID <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=?(\=|\/))

我试图从这样的链接中提取youtube ID

<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="" />

#重新替换(参考“(-a-zA-Z0-9\]+)([-a-zA-Z0-9\]+)([-a-zA-Z0-9\]+)”,“\1”,“一”)#
输出:
RegEx今天不是我的朋友。我错过了什么

谢谢


    <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>
#mid(ytID,sLenPos.pos[1],sLenPos.len[1])#
尝试使用正则表达式:

vi\/([^\/]+) // 0Z3jyvM0jZc

在CFML正则表达式模式中,您不需要逃避正斜杠。因此,选择掩码所具有的内容,并使用您喜欢的任何方法(只有当字符串确实匹配时,这两种方法才起作用):


#mid(ytID,sLenPos.pos[2],sLenPos.len[2])#==OZ3jyvM0jZc
#重新替换(ytID,“.*/vi/([^/]+)/.*”,“\1”)#==OZ3jyvM0jZc

保持这种简单的关键是使用
[^/]+
匹配一个或多个非
/

的字符。我认为正则表达式可能是用于此工作的错误工具。使用列表怎么样



Regex不是我的专长。但是为什么不改用reMatch()或reFind()呢?它们会做同样的事情吗?@Nate-same?没有。但是它们是相似的(查找与替换),并且似乎更符合逻辑,因为您希望查找值而不是替换它。看看@Satyajit的例子是否奏效。对,对。我需要用YT视频替换它,因为代码不是通过RSS输入的。@Nate-什么是所需输出的示例?是的,所有那些正则表达式组!尝试使用正则表达式“vi=?[\=\\/]([-a-zA-Z0-9\]+)| vi=\/([-a-zA-Z0-9\]+)”如果“id”总是在相同的位置,那么是的,列表函数更简单。否则,正则表达式就有优势@内特-位置是静态的吗?
<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
</pre>
</cfoutput>
 <cfset ytStr = '<img src="http://img.youtube.com/vi/0Z3jyvM0jZc/2.jpg" alt="" />'>
 <cfset ytID = ListGetAt(ytStr, 4, '/')>