使用正则表达式多次替换字符串

时间:2010-07-20 07:29:13

标签: regex coldfusion date-format

例如我们的日期是2010年5月12日

<cfset may_12_2010 = CreateDate(2010, 5, 12)>

使用DateFormat函数,我们可以使用

DateFormat(may_12_2010, "mmmm m dddd d yyyy")

将显示May 5 Wednesday 12 2010

如果由于某种原因我不能使用DateFormat函数,我们如何用上面的例子显示相同的结果(使用相同的掩码)?

代码:

<cfset may_12_2010 = CreateDate(2010, 5, 12)>

<cfset mask = "mmmm m dddd d yyyy">

#DateFormat(may_12_2010, mask)#

<cfset d = DateFormat(may_12_2010, "d") />
<cfset dd = DateFormat(may_12_2010, "dd") />
<cfset ddd = DateFormat(may_12_2010, "ddd") />
<cfset dddd = DateFormat(may_12_2010, "dddd") />

<cfset m = DateFormat(may_12_2010, "m") />
<cfset mm = DateFormat(may_12_2010, "mm") />
<cfset mmm = DateFormat(may_12_2010, "mmm") />
<cfset mmmm = DateFormat(may_12_2010, "mmmm") />

<cfset yy = DateFormat(may_12_2010, "yy") />
<cfset yyyy = DateFormat(may_12_2010, "yyyy") />

<cfset stringDate = mask />

<cfset stringDate = REReplaceNoCase(stringDate, "d{4,4}", dddd, "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "d{3,3}", ddd, "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "d{2,2}", dd, "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "d", d, "ALL") />

<cfset stringDate = REReplaceNoCase(stringDate, "m{4,4}", mmmm, "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "m{3,3}", mmm, "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "m{2,2}", mm, "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "m", m, "ALL") />

<cfset stringDate = REReplaceNoCase(stringDate, "y{4,4}", yyyy, "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "y{2,2}", yy, "ALL") />

<br>
#stringDate#

上面的代码将显示

May 5 Wednesday 12 2010
5ay 5 We12nes12ay 12 2010

谢谢

2 个答案:

答案 0 :(得分:1)

要解决您的问题,只需制作正则表达式:

<cfset stringDate = REReplaceNoCase(stringDate, "\bdddd\b" , dddd , "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "\bddd\b"  , ddd  , "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "\bdd\b"   , dd   , "ALL") />
<cfset stringDate = REReplaceNoCase(stringDate, "\bd\b"    , d    , "ALL") />
....

\b标记“单词边界”的位置 - 这是单词字符和非单词字符之间的变化,其中“单词字符”是[a-zA-Z0-9_] - 和所以阻止了“星期三”中的's匹配。

但实际上,只需正确使用DateFormat功能!

答案 1 :(得分:0)

我很困惑为什么你不能使用dateformat。我从未有过dateformat不接受一个值,你甚至可以只使用一个字符串,它并不关心。