Arrays 将ColdFusion会话转换为数组(日期)正则表达式问题

Arrays 将ColdFusion会话转换为数组(日期)正则表达式问题,arrays,regex,coldfusion,Arrays,Regex,Coldfusion,我正在尝试将会话转换为特定的(日期)字符串。 此日期字段有一个掩码,该掩码将始终使日期具有2015年5月2日的格式 我正在尝试使用此日期并创建一个如下所示的数组: 数组 [1] 02 [2] 05 [3] 2015年 是否有一个正则表达式可以帮助我创建它,方法是选择第一个数组的前两个数字,然后选择第二个数组的后两个数字,然后选择第三个数组的最后四个数字 这样我就可以创建多个变量 <cfset Purchasedate = "02/05/2015" /> <cfset Purch

我正在尝试将会话转换为特定的(日期)字符串。

此日期字段有一个掩码,该掩码将始终使日期具有2015年5月2日的格式

我正在尝试使用此日期并创建一个如下所示的数组:
数组
[1] 02
[2] 05
[3] 2015年

是否有一个正则表达式可以帮助我创建它,方法是选择第一个数组的前两个数字,然后选择第二个数组的后两个数字,然后选择第三个数组的最后四个数字

这样我就可以创建多个变量

<cfset Purchasedate = "02/05/2015" />
<cfset PurchArray = ReMatch("\2d,\2d,\4d",Purchasedate) />
<cfdump var="#PurchArray#">

此正则表达式显然不起作用
\2d、\2d、\4d
,因此非常感谢您的帮助

正则表达式应该是
(\d{2})\/(\d{2})\/(\d{4})
。转义反斜杠可能是可选的

\d
匹配单个数字。
{x}
正好匹配上一个事件的x个数字(在上面的例子中,是一个数字)。
()
括号是捕获组,允许您引用整个比赛的片段

同样,你可以做
\d\d\/\d\d\/\d\d\d
[0-9]{2}\/[0-9]{2}\/[0-9]{4}
,它们都将完成同样的事情

(\d{2})\/(\d{2})\/(\d{4})

抓住被俘的团伙
这个正则表达式是合理的,但它不会像您希望的那样返回数组中捕获的组。这是因为
ReMatch
不会这样做。请参阅。

您不需要正则表达式。这会给你你想要的

writedump(listtoarray("02/05/2015", "/"));

但是,如果session.checkout.vehicle.purchasedate是一个日期对象,则可以使用日期函数year()、month()和day()。

请参见最新编辑;这与重新比赛的工作方式有关。链接的答案说明了原因,但我提供的正则表达式将捕获您需要的信息(这只是获取信息的问题)<代码>重新匹配
确实返回一个数组,但匹配数组不是捕获数组。当您执行单个
\d
时,您是在*匹配一个位数。整个字符串包含6位数字,因此您可以得到一个数组。@DavidBrierton只是为了好玩(Dan的答案很好,CF的大量列表函数在这样的好时机很有用。不过,为了好玩,
#重新匹配(“\d+”,变量)#
就可以了。它唯一的优点是分隔符不重要,而且不太可能。我也会使用列表版本。这比我的答案+1要好。要设置变量,请尝试移除环绕
writemap(
)。