This package provides a CGo-free port of the PCRE2 regular expression library. The lib directory contains source code automatically translated from PCRE2's C source. This package wraps that code and provides an interface as close as possible to Go's stdlib regexp package
Due to the use of PCRE2, this library contains extra features such as lookaheads/lookbehinds. The stdlib regex engine, RE2, left these features out for a reason. It's easy to create regular expressions with this library that have exponential runtime. This creates the possibility of a denial of service attack. Only use this library if the extra features are needed and the user providing the regex is trusted (such as if it's in a config file). Otherwise, use the standard library regexp package.
- linux/amd64
- linux/386
- linux/arm64
- linux/arm
- linux/riscv64
- darwin/amd64
- darwin/arm64
More OS support is planned.
In order to transpile pcre2, a Go and C compiler (preferably GCC) will be needed.
-
First, install ccgo
-
Then, download the pcre source code. It can be found here: https://github.com/PCRE2Project/pcre2.
-
Once downloaded,
cd
into the source directory -
Run
./configure
. If cross-compiling, provide the path to the cross-compiler in theCC
variable, and set--target
to the target architecture. -
When it completes, there should be a
Makefile
in the directory. -
Run
ccgo -compiledb pcre.json make
. Do not add-j
arguments to the make command. -
Run the following command (replace items in triangle brackets):
CC=/usr/bin/gcc ccgo -o pcre2_<os>_<arch>.go -pkgname lib -trace-translation-units -export-externs X -export-defines D -export-fields F -export-structs S -export-typedefs T pcre.json .libs/libpcre2-8.a
-
If cross-compiling, set the
CCGO_CC
variable to to path of the cross-compiler, and theCCGO_AR
variable to the path of the cross-compiler'sar
binary. Also, setTARGET_GOARCH
to the GOARCH you're targeting andTARGET_GOOS
to the OS you're targeting. -
Once the command completes, two go files will be created. One will start with
pcre2
, the other withcapi
. Copy both of these to thelib
directory in this repo.