This crate provides tools for compiling and using regular expressions.
It is intended as a simple but compiler-checked version of the regex crate, as it does regular expression compilation at compile-time, but only supports POSIX Extended Regular Expressions.
Usage
use *;
const PHONE_REGEX: = compile_regex!;
const COLOR_REGEX: = compile_regex!;
To minimize memory overhead and binary size, it is recommended to create a single instance of each regular expression (using a const variable) rather than creating multiple.
Roadmap
Features
- POSIX-compilant ambiguous submatching rules: we currently implement the Perl-like greedy submatching when submatches are ambiguous (this should only affect
exec, nottest, and only more complex regexes). While known implementations are more expensive, I plan on also supporting the POSIX rules. - Case-insensitive mode: while regexes can be modified to support case-insensitivity (and this can also be done on ascii by just lower-casing the text first), I intend to implement case-insensitive mode.
- Non-capturing groups:
(?:non-capturing)while not POSIX ERE standard-compilant, this is a relatively commonly used feature (and can improve performance by not tracking matches). If added, this will be behind a feature flag.
Performance Improvements
-
u8-based engines: performance improvements can be made for many regexes (such as those with only ascii) by usingu8s instead of extracting variably one to four-bytechars from strings. - Additional limited-feature engines. This is relatively open-ended, but major improvements can be made for regexes with certain properties.
Alternatives
ere is intended as an alternative to regex that provides compile-time checking and regex compilation. However, ere is less featureful, so here are a few reasons you might prefer regex:
- You require more complex regular expressions with features like backreferences and word boundary checking (which are unavailable in POSIX EREs).
- You need run-time-compiled regular expressions (such as when provided by the user).
- Your regular expression runs significantly more efficiently on a specific regex engine not currently available in
ere.