Skip to main content

Object RE2

A precompiled Google RE2 regex from C++ land that can be used from your Lua scripts.

TIP if you are just working with simple regexes then it is better to use the built in LuaJIT functions. The performance gains may not be enough to justify crossing the Lua-C boundary. This works best with complex or large numbers of regexes that are called at a low frequency.

Functions

A summary of the functions available in this object.

Creation

You need to use the T.re2 method to create a precompiled regex object. After the creation, you can invoke the following function to run the matches.

Functions

NameInOutDescription
partial_matchstringboolDoes the regex match anywhere in the input string
full_matchstringboolFull input string must match the regex
partial_match_c1stringbool, stringMatch input string with 1 capture. If matched, return true + captured string
Example (Host.*)\\s*: will pull the match in paranthesis into a string. If not matched, return false, nil.
partial_match_c2stringbool, string, stringSame as partial_match_c1 but extract TWO captures rather than one.
partial_match_nstringbool, string1..stringNPartial match returns variable number of strings, you are expected to know how many captures are there
full_match_nstringbool, string1..stringNFull input string must match the regex. Returns N-capture strings

More will be added as required.

Example

Here is an example usage of RE2 parsing HTTP headers. You create a precompiled RE2 once in onload(..) then use it in your code.

onload = function()

T.re2_http_request = T.re2("(GET|POST|HEAD|OPTIONS|CONNECT)\\s(\\S+)\\sHTTP/\\d\\.\\d")
T.re2_connect=T.re2("CONNECT\\s(\\S+):(\\d+)")

end,

-- reassembly_handler block
--
reassembly_handler = {


onpayload = function(engine, timestamp, flowkey, direction, seekpos, buffer)

-- Using RE2
local match,c1,c2 = T.re2_http_request:partial_match_n(buffstr:tostring())

print("Method="..c1)
print("URL="..c2)