私はあなたが望むことを達成することを可能にするユーティリティを持っています。
構文はまったく同じではなく、「単純な」ものには少しイライラしますが、最終的にはより柔軟になります。
基本的に、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
覚えておくべきことの1つは、これはCFのorg.apache.oro.text.regexエンジンとは異なるjava.util.regexエンジンを使用することです。これはより多くの機能を提供しますが、いくつかの機能は動作しません(まだ)。
次のバージョンはかなりメジャーなリリースになる予定なので、フィードバックをお待ちしております。
具体的には、私が熟考してきた機能の1つは、上記のような長時間の手動関数コールバックメソッドを回避する方法です。おそらく次のようなものを有効にします。
Jrex.replace( MyString , MyRegex , "\F:DateAdd('h',1,\1)" , 'all' )
誰かがそれについて考えているかどうか聞いてみるといいでしょう。