Elixir bindings for Hyperscan, a high performance multiple-regex matching library.
Hyperscan was published by Intel and allows simultaneous matching of up to tens of thousands of regular expressions simulataneously and efficiently. It is used for things like deep packet inspection.
These bindings try to stay as close as possible to the C API provided by Hyperscan so that its excellent documentation will be useful to you, as a user of the library.
# Compile a regular expression.
{:ok, db} = Hyperscan.compile("quick", 0)
# Allocate scratch space for matching it.
{:ok, scratch} = Hyperscan.alloc_scratch(db)
# Test the regex against a string.
{:ok, true} = Hyperscan.match(db, "the quick brown fox", scratch)
Building the NIF requires the Hyperscan library to be installed. Support for ARM-based systems is available through a fork called Vectorscan.
# On an x86-64 Linux host try:
apt install libhyperscan-dev
# On an M1/M2 Macbook, this should work:
brew install vectorscan
Then add it to your project dependencies in Mix.exs:
def deps do
[
{:hyperscan, "~> 0.1.0"}
]
end