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.
More OS support is planned.
How to transpile pcre2
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.
cdinto the source directory
./configure. If cross-compiling, provide the path to the cross-compiler in the
CCvariable, and set
--targetto the target architecture.
When it completes, there should be a
Makefilein the directory.
ccgo -compiledb pcre.json make. Do not add
-jarguments 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_CCvariable to to path of the cross-compiler, and the
CCGO_ARvariable to the path of the cross-compiler’s
arbinary. Also, set
TARGET_GOARCHto the GOARCH you’re targeting and
TARGET_GOOSto the OS you’re targeting.
Once the command completes, two go files will be created. One will start with
pcre2, the other with
capi. Copy both of these to the
libdirectory in this repo.