Checking for a match instead of find() would allow matcher to exit early instead of looking for sub-sequences beyond the first non-match.
In UDFLike.java, the complex pattern checker uses matches() and the vectorized version uses find(0), which is more expensive.
The miss in match is nearly ~3x more expensive per-row with the .find(0) over the .match() check version.
The pattern match scenario is nearly the same.
The lazy scenario makes it slower when there's a hit (because match runs the check till end, but ~2x faster when there's a miss).