<cffunction name="JREReplace" access="public" returntype="string" output="false"
hint="This performs Java REReplaces on a string.">
<cfargument name="Text" type="string" required="true" />
<cfargument name="Pattern" type="string" required="true" />
<cfargument name="Target" type="any" required="true" />
<cfargument name="Scope" type="string" required="false" default="ONE" />
<cfscript>
var LOCAL = StructNew();
if (IsSimpleValue( ARGUMENTS.Target )){
if (NOT Compare( ARGUMENTS.Scope, "ALL" )){
return(
CreateObject( "java", "java.lang.String" ).Init(
ARGUMENTS.Text
).ReplaceAll(
ARGUMENTS.Pattern, ARGUMENTS.Target
)
);
} else {
return(
CreateObject( "java", "java.lang.String" ).Init(
ARGUMENTS.Text
).ReplaceFirst(
ARGUMENTS.Pattern,
ARGUMENTS.Target
)
);
}
} else {
LOCAL.Pattern = CreateObject(
"java",
"java.util.regex.Pattern"
).Compile(
ARGUMENTS.Pattern
);
LOCAL.Matcher = LOCAL.Pattern.Matcher( ARGUMENTS.Text );
LOCAL.Results = CreateObject(
"java",
"java.lang.StringBuffer"
).Init();
while ( LOCAL.Matcher.Find() ){
LOCAL.Groups = ArrayNew( 1 );
for (
LOCAL.GroupIndex = 1 ;
LOCAL.GroupIndex LTE LOCAL.Matcher.GroupCount() ;
LOCAL.GroupIndex = (LOCAL.GroupIndex + 1)
){
ArrayAppend(
LOCAL.Groups,
LOCAL.Matcher.Group( JavaCast( "int", LOCAL.GroupIndex ) )
);
}
LOCAL.Matcher.AppendReplacement(
LOCAL.Results,
ARGUMENTS.Target(
LOCAL.Matcher.Group(),
LOCAL.Groups
)
);
if (NOT Compare( ARGUMENTS.Scope, "ONE" )){
break;
}
}
LOCAL.Matcher.AppendTail( LOCAL.Results );
return( LOCAL.Results.ToString() );
}
</cfscript>
</cffunction>