In the core CFML RE functions, refind
only matches once, rematch
always
matches everything, and rereplace
can only replace once or everything, which
results in far less efficient code when doing anything other than these things.
In cfRegex, all Actions that have the ability to match multiple times will
match as many times as possible, by default, and they all accept the Limit
parameter which can be used to control how many times the action occurs.
Using Match as an example:
<cfset FirstNumber = RegexMatch( Pattern = '\d+' , Text = LargeInput , Limit = 1 ) />
will always be more efficient than:
<cfset FirstNumber = ReMatch( reg_expression = '\d+' , string = LargeInput )[1] />
This is because ReMatch
has to return all matches before the first one can be
extracted, whilst RegexMatch
stops as soon as the limit is hit.
Limit accepts a positive integer; a limit of zero means "no limit" or unlimited.
It is important to understand, limit indicates the number of times the action occurs - for Split this means the resulting array will be one larger than the limit number, which is different to java.util.regex's native split limit, but consistent with the way limit works with the rest of cfRegex.
When a boolean callback function is used, if it returns false
the action
does not occur, so the match does not count towards the limit - only returning
true
from the callback will count towards the limit.
Limit can be used with Find, Match, Replace, and Split actions.