A year or so ago there were discussions on this list about a new API for PCRE. The current one is 17 years old and has been greatly hacked around to accommodate new features while retaining compabitility. Over most of this year I have been working on implementing the new API, known as PCRE2. A first attempt at a release candidate is now available here:
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Testing/pcre2-10.00-RC1.tar.gz ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Testing/pcre2-10.00-RC1.tar.bz2 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Testing/pcre2-10.00-RC1.zip This is the first version of a distribution tarball, though people have been testing from the repository sources. Please test this in any way you can and report any problems or errors and typos in the documentation. General comments about the API are also welcome, though it is too late to make any drastic changes. However, if anything really serious crops up, there may have to be changes in the API, but I hope that if this happens the changes will be minimal. There are no specific release notes, because there has been so much change, but here are some things to consider: 1. You should treat this as a new project, not just a drastic update to PCRE1. A lot has changed, though the underlying structure of the code is much the same. We have started the version numbers from 10.00 so as to avoid any confusion with PCRE1 versions. 2. Note that --enable-utf and --enable-ucp have been amalgamated into --enable-unicode, and this is now the default. 3. I have updated the CMake files as well as the configure files. CMake works for me on Linux, but I have no way of testing it on Windows. There is as yet no RunTest.bat file for Windows. I'm hoping a Windows user will provide one by updating the PCRE1 version. 4. Many names have been changed; in particular, pcre_exec() has become pcre2_match(). The PCRE_JAVASCRIPT_COMPAT option has been split into independent functional options PCRE2_ALT_BSUX, PCRE2_ALLOW_EMPTY_CLASS, and PCRE2_MATCH_UNSET_BACKREF. 5. Patterns, subject strings, and replacement strings may all contain binary zeros and for this reason are always passed as a pointer and a length. However, the length may be given as PCRE2_ZERO_TERMINATED for zero-terminated strings. 6. The output vector that holds offsets of matched strings is now a vector of PCRE2_SIZE elements instead of ints. PCRE2_SIZE is expected to be an unsigned integer type and is currently defined as size_t. The special value PCRE2_UNSET is used for unset elements. 7. Error handling has been redesigned and error messages are available in all code unit widths. The error codes have been redesignated. 8. Explicit "studying" of compiled patterns has been abolished - it now always happens automatically. JIT compiling is done by calling a new function, pcre2_jit_compile() after a successful return from pcre2_compile(). 9. The capture_last field of the callout structure is now an unsigned integer, set to zero if there have been no captures. 10. The new pcre2test program has been completely re-written. The old one started as a quick hack, but with so many added options its syntax became horribly messy. The input format has been redesigned and is mostly not compatible with the old program. 11. There are as yet no facilities for saving/restoring a compiled pattern. This was always a hack in PCRE1, added when processors were slower, and before the existence of JIT support (compiled JIT code cannot be saved). However, thought is being given to a way of providing this facility in future. 12. There is no C++ wrapper. The existing PCRE1 wrapper has no maintainer at the moment, so it is unlikely to be ported to PCRE2. It now seems to me that in fact it is best NOT to include such a wrapper with PCRE2, but to encourage somebody to create and maintain a separate project - or several projects, as I think there are different views on how best to do the wrapping. 13. There is a new function called pcre2_substitute() that performs "find and replace" operations. 14. The makevp.* files (for Virtual Pascal) are no longer included; if anybody need these for PCRE2, please update the old files and I will put new versions in a future release. 15. ...and no doubt there are plenty of things I've forgotten. Philip -- Philip Hazel -- ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev
