【问题标题】:how to use a filter using regex in Coldfusion如何在 Coldfusion 中使用正则表达式的过滤器
【发布时间】:2012-04-22 21:22:18
【问题描述】:

coldfusion 新手,regex 新手...

我有一个文件目录,以“some”命名,后跟一个 13 位数字,后跟下划线、ID 和文件结尾,如下所示:

  some0000000000000_ID.jpg

ID 可以是任何字符串。

如何使用正则表达式获取 ID?我想我会寻找这样的东西,它捕获下划线和文件结束点之间的所有内容:

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

但我真的无处可去。有人能指出我正确的方向吗?

谢谢!

编辑:
我最终这样做了,这是 hack-ish 但效果很好:

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

也许对其他人也有用!

【问题讨论】:

  • +1 用于分享您的解决方案。字符串解析部分并不是真正的hackish。请注意,不需要将表达式括在 ## 中。仅当您将表达式结果输出到页面和某些 CF 标记(如 &lt;cfdump var="#x#"&gt;&lt;cfloop collection="#x#"&gt;)时才需要它们。

标签: regex coldfusion cfdirectory


【解决方案1】:
<cfdirectory name="images" directory="#path#" filter="some?????????????_ID.jpg">

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

【讨论】:

  • 但是 ID 可以是“house”或“a_very_long_word”,我还能只使用过滤器吗?
  • 当然。 filter="some?????????????_*.jpg" - 您可以使用ListFirst(name, "_") 获取some????????????? 部分,并使用ListRest(ReplaceNoCase(name, ".jpg", ""), "_") 来剖析没有正则表达式的文件名。
  • 酷。这看起来像是我可以使用的东西!非常感谢你......在我说正则表达式之前还有一段时间...... ;-)
  • 列表函数通常非常有用,你也应该看看其他的。通常,它们可以作为比正则表达式更好的简单字符串处理解决方案加入进来。
【解决方案2】:

目前无法测试,但这就是想法...

<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 数组进行范围检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多