如何使用使用正则表达式过滤器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", ""), ".")#>
别人也许有用呢!
<cfdirectory name="images" directory="#path#" filter="some?????????????_ID.jpg">
的滤波器不是正则表达式模式。它只知道?
和*
通配符。
但ID可以是“house”或“a_very_long_word”,我仍然可以仅使用过滤器来获取? – frequent 2012-04-22 21:27:31
当然。 'filter =“some ????????????? _ *。jpg”' - 您可以使用'ListFirst(name,“_”)'来获得'some ??????? ''部分和'ListRest(ReplaceNoCase(name,“.jpg”,“”),“_”)'不用正则表达式解析文件名。 – Tomalak 2012-04-22 21:31:11
很酷。这看起来像我可以合作的东西!非常感谢...直到我说正则表达式很艰难...... ;-) – 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>
这是非常脆弱的。你应该对'findinfo'数组进行范围检查。 – Tomalak 2012-04-22 21:34:17
绝对会编辑 – 2012-04-22 21:34:50
+1分享您的解决方案。字符串解析部分并不是真正的黑客。请注意,将表达式包含在“##”中并不是必需的。只有在将表达式结果输出到页面以及某些CF标记(如'或''')时,才需要它们。 –
Tomalak
2012-04-23 04:21:33