如何使用使用正则表达式过滤器ColdFusion的

问题描述:

熟悉ColdFusion,新的正则表达式...如何使用使用正则表达式过滤器ColdFusion的

我有文件的目录,有“一些”后跟一个13digit编号命名,其次是下划线,ID和文件结尾像这样:

some0000000000000_ID.jpg 

ID可以是任何字符串。

如何使用正则表达式获得ID?我想我会寻找这样的事情,这下划线和文件结束点之间捕捉一切:

_\A[A-Z]*[a-z]*[0-9]*$ 

但我真的没有在任何地方获得。有人能指引我朝着正确的方向吗?

谢谢!

编辑:
我最后只是这样的,这是黑客十岁上下但工作得很好:

<cfset cropFront = #ListRest(ReReplaceNoCase(name, ".png|.jpg", ""), "_")#> 
<cfset cropFull = #ListFirst(ReReplaceNoCase(cropFront, "xxxxx", ""), ".")#> 

别人也许有用呢!

+0

+1分享您的解决方案。字符串解析部分并不是真正的黑客。请注意,将表达式包含在“##”中并不是必需的。只有在将表达式结果输出到页面以及某些CF标记(如'或''')时,才需要它们。 – Tomalak 2012-04-23 04:21:33

<cfdirectory name="images" directory="#path#" filter="some?????????????_ID.jpg"> 

的滤波器不是正则表达式模式。它只知道?*通配符。

+0

但ID可以是“house”或“a_very_long_word”,我仍然可以仅使用过滤器来获取? – frequent 2012-04-22 21:27:31

+0

当然。 'filter =“some ????????????? _ *。jpg”' - 您可以使用'ListFirst(name,“_”)'来获得'some ??????? ''部分和'ListRest(ReplaceNoCase(name,“.jpg”,“”),“_”)'不用正则表达式解析文件名。 – Tomalak 2012-04-22 21:31:11

+0

很酷。这看起来像我可以合作的东西!非常感谢...直到我说正则表达式很艰难...... ;-) – frequent 2012-04-22 21:33:40

不能在目前的测试,但是这是想法...

<cfdirectory name="files" directory="path" action="list" /> 

<cfloop query="files"> 
    <cfset findinfo = refind("^some(\d{13})_", files.name, 0, true) /> 
    <cfif arraylen(findinfo.pos) eq 2> 
     <cfset fileid = mid(files.name, findinfo.pos[2], findinfo.len[2]) /> 
     <!--- do something ---> 
    </cfif> 
</cfloop> 
+0

这是非常脆弱的。你应该对'findinfo'数组进行范围检查。 – Tomalak 2012-04-22 21:34:17

+1

绝对会编辑 – 2012-04-22 21:34:50