TRE is a lightweight, robust, and efficient POSIX compliant regexp matching
library with some exciting features such as approximate (fuzzy) matching.

At the core of TRE is a new algorithm for regular expression matching with
submatch addressing. The algorithm uses linear worst-case time in the length
of the text being searched, and quadratic worst-case time in the length of
the used regular expression. In other words, the time complexity of the
algorithm is O(M2N), where M is the length of the regular expression and N
is the length of the text. The used space is also quadratic on the length
of the regex, but does not depend on the searched string. This quadratic
behaviour occurs only on pathological cases which are probably very rare
in practice.

TRE includes a version of the agrep (approximate grep) command line tool
for approximate regexp matching in the style of grep. Unlike other agrep
implementations (like the one by Sun Wu and Udi Manber from University of
Arizona available  here) TRE agrep allows full regexps of any length, any
number of errors, and non-uniform costs for insertion, deletion and
substitution.