У меня есть утилита, которая позволяет вам достичь того, что вы хотите.
Синтаксис не совсем то же самое, и немного раздражает «простые» вещи, но в конечном итоге он более гибок.
По сути, вы пишете функцию, которая принимает строку 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>
1012 *
*
Подробности и скачать здесь:
http://www.hybridchill.com/projects/jre-utils.html
Следует иметь в виду, что здесь используется механизм java.util.regex , который отличается от org.apache.oro.text.regex механизма CF и хотя это обеспечивает больше функций, некоторые вещи не работают (пока).
Следующая версия будет довольно серьезной, поэтому любые отзывы, которые вы можете получить, очень приветствуются.
В частности, я размышлял над одной функциональностью - как избежать длинного скучного ручного метода обратного вызова функций, как описано выше - возможно, включить что-то вроде этого:
Jrex.replace( MyString , MyRegex , "\F:DateAdd('h',1,\1)" , 'all' )
Было бы приятно услышать, если у кого-то есть мысли по этому поводу.