我有一个实用程序,可以让你实现你想要的。
语法不太一样,对“简单”的东西有点刺激,但最终它更灵活。
基本上你写一个函数,它接受一个Match
字符串和Groups
数组并返回一个字符串 - 在函数内部你可以做你喜欢的事情,它会被应用到每个匹配。
像这样:
<cfset Jrex = createObject('component','jre-utils').init() />
<cfset MyString = "STARTDATE_2010-05-07 00:05:00.0_ENDDATE" />
<cfset MyRegex = "STARTDATE_([\s-.:0-9]*)_ENDDATE" />
<cfset MyString = Jrex.replace( MyString , MyRegex , addHour , 'all' )/>
<cffunction name="addHour" returntype="String" output="false">
<cfargument name="Match" type="String"/>
<cfargument name="Groups" type="Array" default="#ArrayNew(1)#"/>
<cfset var Result = DateAdd('h',1,Groups[1]) />
<cfreturn DateFormat( Result , 'yyyy-mm-dd' )
& ' ' & TimeFormat( Result , 'HH:mm:ss' )
/>
</cffunction>
详细信息并在此处下载:
http ://www.hybridchill.com/projects/jre-utils.html
要记住的一件事是,它使用了java.util.regex引擎,这与 CF 的org.apache.oro.text.regex引擎不同,虽然它提供了更多功能,但有些东西不起作用(还)。
下一个版本将是一个相当重要的版本,因此非常欢迎您提供任何反馈。
具体来说,我一直在思考的一个功能是如何避免上面冗长的手动函数回调方法——也许可以启用这样的功能:
Jrex.replace( MyString , MyRegex , "\F:DateAdd('h',1,\1)" , 'all' )
很高兴听到有人对此有想法。