README.md

# Hyperscan

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].

[deep packet inspection]: https://en.wikipedia.org/wiki/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.

[excellent documentation]: https://intel.github.io/hyperscan/dev-reference/api_files.html

## Example

```elixir
# 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)
```

## Installation

Building the NIF requires the Hyperscan library to be installed. Support for
ARM-based systems is available through a fork called Vectorscan.

```bash
# On an x86-64 Linux host try:
apt install hyperscan
```

```bash
# On an M1/M2 Macbook, this should work:
brew install vectorscan
```

Then add it to your project dependencies in Mix.exs:
```elixir
def deps do
  [
    {:hyperscan, "~> 0.1.0"}
  ]
end
```