So Yeah, Regex is Bad
Don’t get me wrong, regex is awesome, and entirely useful—sometimes it’s the only option, it’s just not the best tool of choice for wire speed applications. Often the sys-admin and network type converts to BIG-IP will find the regexp tcl command and go that route because it’s familiar. If that describes you, please let me introduce you to a couple more appropriate commands:
These two commands will cover a great percentage of regexp’s use cases, and will save significant resources on the system. Don’t buy it? Here’s an example:
% set ip "10.10.20.200"10.10.20.200% time { scan $ip {%d.%d.%d.%d} a b c d} 10000
2.1713 microseconds per iteration% time {regexp {([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})} $ip matched a b c d} 10000
34.2604 microseconds per iteration
Two approaches, same result. The time to achieve that result? The scan command bests regexp by far. I’ll save you the calculation…that’s a 93.7% reduction in processing time. 93.7 percent! Now, mind you, the difference between 2 and 34 microseconds will be negligible to an individual request’s response time, but in the context of a single system handling hundreds of thousands or even millions of request per second, the difference matters. A lot.
Thanks to (who else?) hoolio for the example. For other optimization considerations, check out the iRules Optimization 101 series.
Related Articles
- iRules 101 - #14 - TCL String Commands Part 2 > DevCentral > F5 ...
- iRules 101 - #13 - TCL String Commands Part 1 > DevCentral > F5 ...
- iRules 101 - #16 - Parsing Strings with the TCL Scan Command ...
- s/regex/English/g
- Scan - Making string manipulation efficient > DevCentral > F5 ...
- Regex - DevCentral - F5 DevCentral > Community > Group Details ...
- REGEX Alternatives - DevCentral - F5 DevCentral > Community ...
- Regex in STREAM::expression - DevCentral - F5 DevCentral ...
- String map and redirect - DevCentral - F5 DevCentral > Community ...
- string manipulation - DevCentral - F5 DevCentral > Community ...