| 1.10.6 (2024-08-02) |
| =================== |
| This is a new patch release with a fix for the `unstable` crate feature that |
| enables `std::str::Pattern` trait integration. |
| |
| Bug fixes: |
| |
| * [BUG #1219](https://github.com/rust-lang/regex/pull/1219): |
| Fix the `Pattern` trait implementation as a result of nightly API breakage. |
| |
| |
| 1.10.5 (2024-06-09) |
| =================== |
| This is a new patch release with some minor fixes. |
| |
| Bug fixes: |
| |
| * [BUG #1203](https://github.com/rust-lang/regex/pull/1203): |
| Escape invalid UTF-8 when in the `Debug` impl of `regex::bytes::Match`. |
| |
| |
| 1.10.4 (2024-03-22) |
| =================== |
| This is a new patch release with some minor fixes. |
| |
| * [BUG #1169](https://github.com/rust-lang/regex/issues/1169): |
| Fixes a bug with compiling a reverse NFA automaton in `regex-automata`. |
| * [BUG #1178](https://github.com/rust-lang/regex/pull/1178): |
| Clarifies that when `Cow::Borrowed` is returned from replace APIs, it is |
| equivalent to the input. |
| |
| |
| 1.10.3 (2024-01-21) |
| =================== |
| This is a new patch release that fixes the feature configuration of optional |
| dependencies, and fixes an unsound use of bounds check elision. |
| |
| Bug fixes: |
| |
| * [BUG #1147](https://github.com/rust-lang/regex/issues/1147): |
| Set `default-features=false` for the `memchr` and `aho-corasick` dependencies. |
| * [BUG #1154](https://github.com/rust-lang/regex/pull/1154): |
| Fix unsound bounds check elision. |
| |
| |
| 1.10.2 (2023-10-16) |
| =================== |
| This is a new patch release that fixes a search regression where incorrect |
| matches could be reported. |
| |
| Bug fixes: |
| |
| * [BUG #1110](https://github.com/rust-lang/regex/issues/1110): |
| Revert broadening of reverse suffix literal optimization introduced in 1.10.1. |
| |
| |
| 1.10.1 (2023-10-14) |
| =================== |
| This is a new patch release with a minor increase in the number of valid |
| patterns and a broadening of some literal optimizations. |
| |
| New features: |
| |
| * [FEATURE 04f5d7be](https://github.com/rust-lang/regex/commit/04f5d7be4efc542864cc400f5d43fbea4eb9bab6): |
| Loosen ASCII-compatible rules such that regexes like `(?-u:☃)` are now allowed. |
| |
| Performance improvements: |
| |
| * [PERF 8a8d599f](https://github.com/rust-lang/regex/commit/8a8d599f9d2f2d78e9ad84e4084788c2d563afa5): |
| Broader the reverse suffix optimization to apply in more cases. |
| |
| |
| 1.10.0 (2023-10-09) |
| =================== |
| This is a new minor release of `regex` that adds support for start and end |
| word boundary assertions. That is, `\<` and `\>`. The minimum supported Rust |
| version has also been raised to 1.65, which was released about one year ago. |
| |
| The new word boundary assertions are: |
| |
| * `\<` or `\b{start}`: a Unicode start-of-word boundary (`\W|\A` on the left, |
| `\w` on the right). |
| * `\>` or `\b{end}`: a Unicode end-of-word boundary (`\w` on the left, `\W|\z` |
| on the right)). |
| * `\b{start-half}`: half of a Unicode start-of-word boundary (`\W|\A` on the |
| left). |
| * `\b{end-half}`: half of a Unicode end-of-word boundary (`\W|\z` on the |
| right). |
| |
| The `\<` and `\>` are GNU extensions to POSIX regexes. They have been added |
| to the `regex` crate because they enjoy somewhat broad support in other regex |
| engines as well (for example, vim). The `\b{start}` and `\b{end}` assertions |
| are aliases for `\<` and `\>`, respectively. |
| |
| The `\b{start-half}` and `\b{end-half}` assertions are not found in any |
| other regex engine (although regex engines with general look-around support |
| can certainly express them). They were added principally to support the |
| implementation of word matching in grep programs, where one generally wants to |
| be a bit more flexible in what is considered a word boundary. |
| |
| New features: |
| |
| * [FEATURE #469](https://github.com/rust-lang/regex/issues/469): |
| Add support for `\<` and `\>` word boundary assertions. |
| * [FEATURE(regex-automata) #1031](https://github.com/rust-lang/regex/pull/1031): |
| DFAs now have a `start_state` method that doesn't use an `Input`. |
| |
| Performance improvements: |
| |
| * [PERF #1051](https://github.com/rust-lang/regex/pull/1051): |
| Unicode character class operations have been optimized in `regex-syntax`. |
| * [PERF #1090](https://github.com/rust-lang/regex/issues/1090): |
| Make patterns containing lots of literal characters use less memory. |
| |
| Bug fixes: |
| |
| * [BUG #1046](https://github.com/rust-lang/regex/issues/1046): |
| Fix a bug that could result in incorrect match spans when using a Unicode word |
| boundary and searching non-ASCII strings. |
| * [BUG(regex-syntax) #1047](https://github.com/rust-lang/regex/issues/1047): |
| Fix panics that can occur in `Ast->Hir` translation (not reachable from `regex` |
| crate). |
| * [BUG(regex-syntax) #1088](https://github.com/rust-lang/regex/issues/1088): |
| Remove guarantees in the API that connect the `u` flag with a specific HIR |
| representation. |
| |
| `regex-automata` breaking change release: |
| |
| This release includes a `regex-automata 0.4.0` breaking change release, which |
| was necessary in order to support the new word boundary assertions. For |
| example, the `Look` enum has new variants and the `LookSet` type now uses `u32` |
| instead of `u16` to represent a bitset of look-around assertions. These are |
| overall very minor changes, and most users of `regex-automata` should be able |
| to move to `0.4` from `0.3` without any changes at all. |
| |
| `regex-syntax` breaking change release: |
| |
| This release also includes a `regex-syntax 0.8.0` breaking change release, |
| which, like `regex-automata`, was necessary in order to support the new word |
| boundary assertions. This release also includes some changes to the `Ast` |
| type to reduce heap usage in some cases. If you are using the `Ast` type |
| directly, your code may require some minor modifications. Otherwise, users of |
| `regex-syntax 0.7` should be able to migrate to `0.8` without any code changes. |
| |
| `regex-lite` release: |
| |
| The `regex-lite 0.1.1` release contains support for the new word boundary |
| assertions. There are no breaking changes. |
| |
| |
| 1.9.6 (2023-09-30) |
| ================== |
| This is a patch release that fixes a panic that can occur when the default |
| regex size limit is increased to a large number. |
| |
| * [BUG aa4e4c71](https://github.com/rust-lang/regex/commit/aa4e4c7120b0090ce0624e3c42a2ed06dd8b918a): |
| Fix a bug where computing the maximum haystack length for the bounded |
| backtracker could result underflow and thus provoke a panic later in a search |
| due to a broken invariant. |
| |
| |
| 1.9.5 (2023-09-02) |
| ================== |
| This is a patch release that hopefully mostly fixes a performance bug that |
| occurs when sharing a regex across multiple threads. |
| |
| Issue [#934](https://github.com/rust-lang/regex/issues/934) |
| explains this in more detail. It is [also noted in the crate |
| documentation](https://docs.rs/regex/latest/regex/#sharing-a-regex-across-threads-can-result-in-contention). |
| The bug can appear when sharing a regex across multiple threads simultaneously, |
| as might be the case when using a regex from a `OnceLock`, `lazy_static` or |
| similar primitive. Usually high contention only results when using many threads |
| to execute searches on small haystacks. |
| |
| One can avoid the contention problem entirely through one of two methods. |
| The first is to use lower level APIs from `regex-automata` that require passing |
| state explicitly, such as [`meta::Regex::search_with`](https://docs.rs/regex-automata/latest/regex_automata/meta/struct.Regex.html#method.search_with). |
| The second is to clone a regex and send it to other threads explicitly. This |
| will not use any additional memory usage compared to sharing the regex. The |
| only downside of this approach is that it may be less convenient, for example, |
| it won't work with things like `OnceLock` or `lazy_static` or `once_cell`. |
| |
| With that said, as of this release, the contention performance problems have |
| been greatly reduced. This was achieved by changing the free-list so that it |
| was sharded across threads, and that ensuring each sharded mutex occupies a |
| single cache line to mitigate false sharing. So while contention may still |
| impact performance in some cases, it should be a lot better now. |
| |
| Because of the changes to how the free-list works, please report any issues you |
| find with this release. That not only includes search time regressions but also |
| significant regressions in memory usage. Reporting improvements is also welcome |
| as well! If possible, provide a reproduction. |
| |
| Bug fixes: |
| |
| * [BUG #934](https://github.com/rust-lang/regex/issues/934): |
| Fix a performance bug where high contention on a single regex led to massive |
| slow downs. |
| |
| |
| 1.9.4 (2023-08-26) |
| ================== |
| This is a patch release that fixes a bug where `RegexSet::is_match(..)` could |
| incorrectly return false (even when `RegexSet::matches(..).matched_any()` |
| returns true). |
| |
| Bug fixes: |
| |
| * [BUG #1070](https://github.com/rust-lang/regex/issues/1070): |
| Fix a bug where a prefilter was incorrectly configured for a `RegexSet`. |
| |
| |
| 1.9.3 (2023-08-05) |
| ================== |
| This is a patch release that fixes a bug where some searches could result in |
| incorrect match offsets being reported. It is difficult to characterize the |
| types of regexes susceptible to this bug. They generally involve patterns |
| that contain no prefix or suffix literals, but have an inner literal along with |
| a regex prefix that can conditionally match. |
| |
| Bug fixes: |
| |
| * [BUG #1060](https://github.com/rust-lang/regex/issues/1060): |
| Fix a bug with the reverse inner literal optimization reporting incorrect match |
| offsets. |
| |
| |
| 1.9.2 (2023-08-05) |
| ================== |
| This is a patch release that fixes another memory usage regression. This |
| particular regression occurred only when using a `RegexSet`. In some cases, |
| much more heap memory (by one or two orders of magnitude) was allocated than in |
| versions prior to 1.9.0. |
| |
| Bug fixes: |
| |
| * [BUG #1059](https://github.com/rust-lang/regex/issues/1059): |
| Fix a memory usage regression when using a `RegexSet`. |
| |
| |
| 1.9.1 (2023-07-07) |
| ================== |
| This is a patch release which fixes a memory usage regression. In the regex |
| 1.9 release, one of the internal engines used a more aggressive allocation |
| strategy than what was done previously. This patch release reverts to the |
| prior on-demand strategy. |
| |
| Bug fixes: |
| |
| * [BUG #1027](https://github.com/rust-lang/regex/issues/1027): |
| Change the allocation strategy for the backtracker to be less aggressive. |
| |
| |
| 1.9.0 (2023-07-05) |
| ================== |
| This release marks the end of a [years long rewrite of the regex crate |
| internals](https://github.com/rust-lang/regex/issues/656). Since this is |
| such a big release, please report any issues or regressions you find. We would |
| also love to hear about improvements as well. |
| |
| In addition to many internal improvements that should hopefully result in |
| "my regex searches are faster," there have also been a few API additions: |
| |
| * A new `Captures::extract` method for quickly accessing the substrings |
| that match each capture group in a regex. |
| * A new inline flag, `R`, which enables CRLF mode. This makes `.` match any |
| Unicode scalar value except for `\r` and `\n`, and also makes `(?m:^)` and |
| `(?m:$)` match after and before both `\r` and `\n`, respectively, but never |
| between a `\r` and `\n`. |
| * `RegexBuilder::line_terminator` was added to further customize the line |
| terminator used by `(?m:^)` and `(?m:$)` to be any arbitrary byte. |
| * The `std` Cargo feature is now actually optional. That is, the `regex` crate |
| can be used without the standard library. |
| * Because `regex 1.9` may make binary size and compile times even worse, a |
| new experimental crate called `regex-lite` has been published. It prioritizes |
| binary size and compile times over functionality (like Unicode) and |
| performance. It shares no code with the `regex` crate. |
| |
| New features: |
| |
| * [FEATURE #244](https://github.com/rust-lang/regex/issues/244): |
| One can opt into CRLF mode via the `R` flag. |
| e.g., `(?mR:$)` matches just before `\r\n`. |
| * [FEATURE #259](https://github.com/rust-lang/regex/issues/259): |
| Multi-pattern searches with offsets can be done with `regex-automata 0.3`. |
| * [FEATURE #476](https://github.com/rust-lang/regex/issues/476): |
| `std` is now an optional feature. `regex` may be used with only `alloc`. |
| * [FEATURE #644](https://github.com/rust-lang/regex/issues/644): |
| `RegexBuilder::line_terminator` configures how `(?m:^)` and `(?m:$)` behave. |
| * [FEATURE #675](https://github.com/rust-lang/regex/issues/675): |
| Anchored search APIs are now available in `regex-automata 0.3`. |
| * [FEATURE #824](https://github.com/rust-lang/regex/issues/824): |
| Add new `Captures::extract` method for easier capture group access. |
| * [FEATURE #961](https://github.com/rust-lang/regex/issues/961): |
| Add `regex-lite` crate with smaller binary sizes and faster compile times. |
| * [FEATURE #1022](https://github.com/rust-lang/regex/pull/1022): |
| Add `TryFrom` implementations for the `Regex` type. |
| |
| Performance improvements: |
| |
| * [PERF #68](https://github.com/rust-lang/regex/issues/68): |
| Added a one-pass DFA engine for faster capture group matching. |
| * [PERF #510](https://github.com/rust-lang/regex/issues/510): |
| Inner literals are now used to accelerate searches, e.g., `\w+@\w+` will scan |
| for `@`. |
| * [PERF #787](https://github.com/rust-lang/regex/issues/787), |
| [PERF #891](https://github.com/rust-lang/regex/issues/891): |
| Makes literal optimizations apply to regexes of the form `\b(foo|bar|quux)\b`. |
| |
| (There are many more performance improvements as well, but not all of them have |
| specific issues devoted to them.) |
| |
| Bug fixes: |
| |
| * [BUG #429](https://github.com/rust-lang/regex/issues/429): |
| Fix matching bugs related to `\B` and inconsistencies across internal engines. |
| * [BUG #517](https://github.com/rust-lang/regex/issues/517): |
| Fix matching bug with capture groups. |
| * [BUG #579](https://github.com/rust-lang/regex/issues/579): |
| Fix matching bug with word boundaries. |
| * [BUG #779](https://github.com/rust-lang/regex/issues/779): |
| Fix bug where some regexes like `(re)+` were not equivalent to `(re)(re)*`. |
| * [BUG #850](https://github.com/rust-lang/regex/issues/850): |
| Fix matching bug inconsistency between NFA and DFA engines. |
| * [BUG #921](https://github.com/rust-lang/regex/issues/921): |
| Fix matching bug where literal extraction got confused by `$`. |
| * [BUG #976](https://github.com/rust-lang/regex/issues/976): |
| Add documentation to replacement routines about dealing with fallibility. |
| * [BUG #1002](https://github.com/rust-lang/regex/issues/1002): |
| Use corpus rejection in fuzz testing. |
| |
| |
| 1.8.4 (2023-06-05) |
| ================== |
| This is a patch release that fixes a bug where `(?-u:\B)` was allowed in |
| Unicode regexes, despite the fact that the current matching engines can report |
| match offsets between the code units of a single UTF-8 encoded codepoint. That |
| in turn means that match offsets that split a codepoint could be reported, |
| which in turn results in panicking when one uses them to slice a `&str`. |
| |
| This bug occurred in the transition to `regex 1.8` because the underlying |
| syntactical error that prevented this regex from compiling was intentionally |
| removed. That's because `(?-u:\B)` will be permitted in Unicode regexes in |
| `regex 1.9`, but the matching engines will guarantee to never report match |
| offsets that split a codepoint. When the underlying syntactical error was |
| removed, no code was added to ensure that `(?-u:\B)` didn't compile in the |
| `regex 1.8` transition release. This release, `regex 1.8.4`, adds that code |
| such that `Regex::new(r"(?-u:\B)")` returns to the `regex <1.8` behavior of |
| not compiling. (A `bytes::Regex` can still of course compile it.) |
| |
| Bug fixes: |
| |
| * [BUG #1006](https://github.com/rust-lang/regex/issues/1006): |
| Fix a bug where `(?-u:\B)` was allowed in Unicode regexes, and in turn could |
| lead to match offsets that split a codepoint in `&str`. |
| |
| |
| 1.8.3 (2023-05-25) |
| ================== |
| This is a patch release that fixes a bug where the regex would report a |
| match at every position even when it shouldn't. This could occur in a very |
| small subset of regexes, usually an alternation of simple literals that |
| have particular properties. (See the issue linked below for a more precise |
| description.) |
| |
| Bug fixes: |
| |
| * [BUG #999](https://github.com/rust-lang/regex/issues/999): |
| Fix a bug where a match at every position is erroneously reported. |
| |
| |
| 1.8.2 (2023-05-22) |
| ================== |
| This is a patch release that fixes a bug where regex compilation could panic |
| in debug mode for regexes with large counted repetitions. For example, |
| `a{2147483516}{2147483416}{5}` resulted in an integer overflow that wrapped |
| in release mode but panicking in debug mode. Despite the unintended wrapping |
| arithmetic in release mode, it didn't cause any other logical bugs since the |
| errant code was for new analysis that wasn't used yet. |
| |
| Bug fixes: |
| |
| * [BUG #995](https://github.com/rust-lang/regex/issues/995): |
| Fix a bug where regex compilation with large counted repetitions could panic. |
| |
| |
| 1.8.1 (2023-04-21) |
| ================== |
| This is a patch release that fixes a bug where a regex match could be reported |
| where none was found. Specifically, the bug occurs when a pattern contains some |
| literal prefixes that could be extracted _and_ an optional word boundary in the |
| prefix. |
| |
| Bug fixes: |
| |
| * [BUG #981](https://github.com/rust-lang/regex/issues/981): |
| Fix a bug where a word boundary could interact with prefix literal |
| optimizations and lead to a false positive match. |
| |
| |
| 1.8.0 (2023-04-20) |
| ================== |
| This is a sizeable release that will be soon followed by another sizeable |
| release. Both of them will combined close over 40 existing issues and PRs. |
| |
| This first release, despite its size, essentially represents preparatory work |
| for the second release, which will be even bigger. Namely, this release: |
| |
| * Increases the MSRV to Rust 1.60.0, which was released about 1 year ago. |
| * Upgrades its dependency on `aho-corasick` to the recently released 1.0 |
| version. |
| * Upgrades its dependency on `regex-syntax` to the simultaneously released |
| `0.7` version. The changes to `regex-syntax` principally revolve around a |
| rewrite of its literal extraction code and a number of simplifications and |
| optimizations to its high-level intermediate representation (HIR). |
| |
| The second release, which will follow ~shortly after the release above, will |
| contain a soup-to-nuts rewrite of every regex engine. This will be done by |
| bringing [`regex-automata`](https://github.com/BurntSushi/regex-automata) into |
| this repository, and then changing the `regex` crate to be nothing but an API |
| shim layer on top of `regex-automata`'s API. |
| |
| These tandem releases are the culmination of about 3 |
| years of on-and-off work that [began in earnest in March |
| 2020](https://github.com/rust-lang/regex/issues/656). |
| |
| Because of the scale of changes involved in these releases, I would love to |
| hear about your experience. Especially if you notice undocumented changes in |
| behavior or performance changes (positive *or* negative). |
| |
| Most changes in the first release are listed below. For more details, please |
| see the commit log, which reflects a linear and decently documented history |
| of all changes. |
| |
| New features: |
| |
| * [FEATURE #501](https://github.com/rust-lang/regex/issues/501): |
| Permit many more characters to be escaped, even if they have no significance. |
| More specifically, any ASCII character except for `[0-9A-Za-z<>]` can now be |
| escaped. Also, a new routine, `is_escapeable_character`, has been added to |
| `regex-syntax` to query whether a character is escapeable or not. |
| * [FEATURE #547](https://github.com/rust-lang/regex/issues/547): |
| Add `Regex::captures_at`. This fills a hole in the API, but doesn't otherwise |
| introduce any new expressive power. |
| * [FEATURE #595](https://github.com/rust-lang/regex/issues/595): |
| Capture group names are now Unicode-aware. They can now begin with either a `_` |
| or any "alphabetic" codepoint. After the first codepoint, subsequent codepoints |
| can be any sequence of alpha-numeric codepoints, along with `_`, `.`, `[` and |
| `]`. Note that replacement syntax has not changed. |
| * [FEATURE #810](https://github.com/rust-lang/regex/issues/810): |
| Add `Match::is_empty` and `Match::len` APIs. |
| * [FEATURE #905](https://github.com/rust-lang/regex/issues/905): |
| Add an `impl Default for RegexSet`, with the default being the empty set. |
| * [FEATURE #908](https://github.com/rust-lang/regex/issues/908): |
| A new method, `Regex::static_captures_len`, has been added which returns the |
| number of capture groups in the pattern if and only if every possible match |
| always contains the same number of matching groups. |
| * [FEATURE #955](https://github.com/rust-lang/regex/issues/955): |
| Named captures can now be written as `(?<name>re)` in addition to |
| `(?P<name>re)`. |
| * FEATURE: `regex-syntax` now supports empty character classes. |
| * FEATURE: `regex-syntax` now has an optional `std` feature. (This will come |
| to `regex` in the second release.) |
| * FEATURE: The `Hir` type in `regex-syntax` has had a number of simplifications |
| made to it. |
| * FEATURE: `regex-syntax` has support for a new `R` flag for enabling CRLF |
| mode. This will be supported in `regex` proper in the second release. |
| * FEATURE: `regex-syntax` now has proper support for "regex that never |
| matches" via `Hir::fail()`. |
| * FEATURE: The `hir::literal` module of `regex-syntax` has been completely |
| re-worked. It now has more documentation, examples and advice. |
| * FEATURE: The `allow_invalid_utf8` option in `regex-syntax` has been renamed |
| to `utf8`, and the meaning of the boolean has been flipped. |
| |
| Performance improvements: |
| |
| * PERF: The upgrade to `aho-corasick 1.0` may improve performance in some |
| cases. It's difficult to characterize exactly which patterns this might impact, |
| but if there are a small number of longish (>= 4 bytes) prefix literals, then |
| it might be faster than before. |
| |
| Bug fixes: |
| |
| * [BUG #514](https://github.com/rust-lang/regex/issues/514): |
| Improve `Debug` impl for `Match` so that it doesn't show the entire haystack. |
| * BUGS [#516](https://github.com/rust-lang/regex/issues/516), |
| [#731](https://github.com/rust-lang/regex/issues/731): |
| Fix a number of issues with printing `Hir` values as regex patterns. |
| * [BUG #610](https://github.com/rust-lang/regex/issues/610): |
| Add explicit example of `foo|bar` in the regex syntax docs. |
| * [BUG #625](https://github.com/rust-lang/regex/issues/625): |
| Clarify that `SetMatches::len` does not (regretably) refer to the number of |
| matches in the set. |
| * [BUG #660](https://github.com/rust-lang/regex/issues/660): |
| Clarify "verbose mode" in regex syntax documentation. |
| * BUG [#738](https://github.com/rust-lang/regex/issues/738), |
| [#950](https://github.com/rust-lang/regex/issues/950): |
| Fix `CaptureLocations::get` so that it never panics. |
| * [BUG #747](https://github.com/rust-lang/regex/issues/747): |
| Clarify documentation for `Regex::shortest_match`. |
| * [BUG #835](https://github.com/rust-lang/regex/issues/835): |
| Fix `\p{Sc}` so that it is equivalent to `\p{Currency_Symbol}`. |
| * [BUG #846](https://github.com/rust-lang/regex/issues/846): |
| Add more clarifying documentation to the `CompiledTooBig` error variant. |
| * [BUG #854](https://github.com/rust-lang/regex/issues/854): |
| Clarify that `regex::Regex` searches as if the haystack is a sequence of |
| Unicode scalar values. |
| * [BUG #884](https://github.com/rust-lang/regex/issues/884): |
| Replace `__Nonexhaustive` variants with `#[non_exhaustive]` attribute. |
| * [BUG #893](https://github.com/rust-lang/regex/pull/893): |
| Optimize case folding since it can get quite slow in some pathological cases. |
| * [BUG #895](https://github.com/rust-lang/regex/issues/895): |
| Reject `(?-u:\W)` in `regex::Regex` APIs. |
| * [BUG #942](https://github.com/rust-lang/regex/issues/942): |
| Add a missing `void` keyword to indicate "no parameters" in C API. |
| * [BUG #965](https://github.com/rust-lang/regex/issues/965): |
| Fix `\p{Lc}` so that it is equivalent to `\p{Cased_Letter}`. |
| * [BUG #975](https://github.com/rust-lang/regex/issues/975): |
| Clarify documentation for `\pX` syntax. |
| |
| |
| 1.7.3 (2023-03-24) |
| ================== |
| This is a small release that fixes a bug in `Regex::shortest_match_at` that |
| could cause it to panic, even when the offset given is valid. |
| |
| Bug fixes: |
| |
| * [BUG #969](https://github.com/rust-lang/regex/issues/969): |
| Fix a bug in how the reverse DFA was called for `Regex::shortest_match_at`. |
| |
| |
| 1.7.2 (2023-03-21) |
| ================== |
| This is a small release that fixes a failing test on FreeBSD. |
| |
| Bug fixes: |
| |
| * [BUG #967](https://github.com/rust-lang/regex/issues/967): |
| Fix "no stack overflow" test which can fail due to the small stack size. |
| |
| |
| 1.7.1 (2023-01-09) |
| ================== |
| This release was done principally to try and fix the doc.rs rendering for the |
| regex crate. |
| |
| Performance improvements: |
| |
| * [PERF #930](https://github.com/rust-lang/regex/pull/930): |
| Optimize `replacen`. This also applies to `replace`, but not `replace_all`. |
| |
| Bug fixes: |
| |
| * [BUG #945](https://github.com/rust-lang/regex/issues/945): |
| Maybe fix rustdoc rendering by just bumping a new release? |
| |
| |
| 1.7.0 (2022-11-05) |
| ================== |
| This release principally includes an upgrade to Unicode 15. |
| |
| New features: |
| |
| * [FEATURE #832](https://github.com/rust-lang/regex/issues/916): |
| Upgrade to Unicode 15. |
| |
| |
| 1.6.0 (2022-07-05) |
| ================== |
| This release principally includes an upgrade to Unicode 14. |
| |
| New features: |
| |
| * [FEATURE #832](https://github.com/rust-lang/regex/pull/832): |
| Clarify that `Captures::len` includes all groups, not just matching groups. |
| * [FEATURE #857](https://github.com/rust-lang/regex/pull/857): |
| Add an `ExactSizeIterator` impl for `SubCaptureMatches`. |
| * [FEATURE #861](https://github.com/rust-lang/regex/pull/861): |
| Improve `RegexSet` documentation examples. |
| * [FEATURE #877](https://github.com/rust-lang/regex/issues/877): |
| Upgrade to Unicode 14. |
| |
| Bug fixes: |
| |
| * [BUG #792](https://github.com/rust-lang/regex/issues/792): |
| Fix error message rendering bug. |
| |
| |
| 1.5.6 (2022-05-20) |
| ================== |
| This release includes a few bug fixes, including a bug that produced incorrect |
| matches when a non-greedy `?` operator was used. |
| |
| * [BUG #680](https://github.com/rust-lang/regex/issues/680): |
| Fixes a bug where `[[:alnum:][:^ascii:]]` dropped `[:alnum:]` from the class. |
| * [BUG #859](https://github.com/rust-lang/regex/issues/859): |
| Fixes a bug where `Hir::is_match_empty` returned `false` for `\b`. |
| * [BUG #862](https://github.com/rust-lang/regex/issues/862): |
| Fixes a bug where 'ab??' matches 'ab' instead of 'a' in 'ab'. |
| |
| |
| 1.5.5 (2022-03-08) |
| ================== |
| This releases fixes a security bug in the regex compiler. This bug permits a |
| vector for a denial-of-service attack in cases where the regex being compiled |
| is untrusted. There are no known problems where the regex is itself trusted, |
| including in cases of untrusted haystacks. |
| |
| * [SECURITY #GHSA-m5pq-gvj9-9vr8](https://github.com/rust-lang/regex/security/advisories/GHSA-m5pq-gvj9-9vr8): |
| Fixes a bug in the regex compiler where empty sub-expressions subverted the |
| existing mitigations in place to enforce a size limit on compiled regexes. |
| The Rust Security Response WG published an advisory about this: |
| https://groups.google.com/g/rustlang-security-announcements/c/NcNNL1Jq7Yw |
| |
| |
| 1.5.4 (2021-05-06) |
| ================== |
| This release fixes another compilation failure when building regex. This time, |
| the fix is for when the `pattern` feature is enabled, which only works on |
| nightly Rust. CI has been updated to test this case. |
| |
| * [BUG #772](https://github.com/rust-lang/regex/pull/772): |
| Fix build when `pattern` feature is enabled. |
| |
| |
| 1.5.3 (2021-05-01) |
| ================== |
| This releases fixes a bug when building regex with only the `unicode-perl` |
| feature. It turns out that while CI was building this configuration, it wasn't |
| actually failing the overall build on a failed compilation. |
| |
| * [BUG #769](https://github.com/rust-lang/regex/issues/769): |
| Fix build in `regex-syntax` when only the `unicode-perl` feature is enabled. |
| |
| |
| 1.5.2 (2021-05-01) |
| ================== |
| This release fixes a performance bug when Unicode word boundaries are used. |
| Namely, for certain regexes on certain inputs, it's possible for the lazy DFA |
| to stop searching (causing a fallback to a slower engine) when it doesn't |
| actually need to. |
| |
| [PR #768](https://github.com/rust-lang/regex/pull/768) fixes the bug, which was |
| originally reported in |
| [ripgrep#1860](https://github.com/BurntSushi/ripgrep/issues/1860). |
| |
| |
| 1.5.1 (2021-04-30) |
| ================== |
| This is a patch release that fixes a compilation error when the `perf-literal` |
| feature is not enabled. |
| |
| |
| 1.5.0 (2021-04-30) |
| ================== |
| This release primarily updates to Rust 2018 (finally) and bumps the MSRV to |
| Rust 1.41 (from Rust 1.28). Rust 1.41 was chosen because it's still reasonably |
| old, and is what's in Debian stable at the time of writing. |
| |
| This release also drops this crate's own bespoke substring search algorithms |
| in favor of a new |
| [`memmem` implementation provided by the `memchr` crate](https://docs.rs/memchr/2.4.0/memchr/memmem/index.html). |
| This will change the performance profile of some regexes, sometimes getting a |
| little worse, and hopefully more frequently, getting a lot better. Please |
| report any serious performance regressions if you find them. |
| |
| |
| 1.4.6 (2021-04-22) |
| ================== |
| This is a small patch release that fixes the compiler's size check on how much |
| heap memory a regex uses. Previously, the compiler did not account for the |
| heap usage of Unicode character classes. Now it does. It's possible that this |
| may make some regexes fail to compile that previously did compile. If that |
| happens, please file an issue. |
| |
| * [BUG OSS-fuzz#33579](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33579): |
| Some regexes can use more heap memory than one would expect. |
| |
| |
| 1.4.5 (2021-03-14) |
| ================== |
| This is a small patch release that fixes a regression in the size of a `Regex` |
| in the 1.4.4 release. Prior to 1.4.4, a `Regex` was 552 bytes. In the 1.4.4 |
| release, it was 856 bytes due to internal changes. In this release, a `Regex` |
| is now 16 bytes. In general, the size of a `Regex` was never something that was |
| on my radar, but this increased size in the 1.4.4 release seems to have crossed |
| a threshold and resulted in stack overflows in some programs. |
| |
| * [BUG #750](https://github.com/rust-lang/regex/pull/750): |
| Fixes stack overflows seemingly caused by a large `Regex` size by decreasing |
| its size. |
| |
| |
| 1.4.4 (2021-03-11) |
| ================== |
| This is a small patch release that contains some bug fixes. Notably, it also |
| drops the `thread_local` (and `lazy_static`, via transitivity) dependencies. |
| |
| Bug fixes: |
| |
| * [BUG #362](https://github.com/rust-lang/regex/pull/362): |
| Memory leaks caused by an internal caching strategy should now be fixed. |
| * [BUG #576](https://github.com/rust-lang/regex/pull/576): |
| All regex types now implement `UnwindSafe` and `RefUnwindSafe`. |
| * [BUG #728](https://github.com/rust-lang/regex/pull/749): |
| Add missing `Replacer` impls for `Vec<u8>`, `String`, `Cow`, etc. |
| |
| |
| 1.4.3 (2021-01-08) |
| ================== |
| This is a small patch release that adds some missing standard trait |
| implementations for some types in the public API. |
| |
| Bug fixes: |
| |
| * [BUG #734](https://github.com/rust-lang/regex/pull/734): |
| Add `FusedIterator` and `ExactSizeIterator` impls to iterator types. |
| * [BUG #735](https://github.com/rust-lang/regex/pull/735): |
| Add missing `Debug` impls to public API types. |
| |
| |
| 1.4.2 (2020-11-01) |
| ================== |
| This is a small bug fix release that bans `\P{any}`. We previously banned empty |
| classes like `[^\w\W]`, but missed the `\P{any}` case. In the future, we hope |
| to permit empty classes. |
| |
| * [BUG #722](https://github.com/rust-lang/regex/issues/722): |
| Ban `\P{any}` to avoid a panic in the regex compiler. Found by OSS-Fuzz. |
| |
| |
| 1.4.1 (2020-10-13) |
| ================== |
| This is a small bug fix release that makes `\p{cf}` work. Previously, it would |
| report "property not found" even though `cf` is a valid abbreviation for the |
| `Format` general category. |
| |
| * [BUG #719](https://github.com/rust-lang/regex/issues/719): |
| Fixes bug that prevented `\p{cf}` from working. |
| |
| |
| 1.4.0 (2020-10-11) |
| ================== |
| This releases has a few minor documentation fixes as well as some very minor |
| API additions. The MSRV remains at Rust 1.28 for now, but this is intended to |
| increase to at least Rust 1.41.1 soon. |
| |
| This release also adds support for OSS-Fuzz. Kudos to |
| [@DavidKorczynski](https://github.com/DavidKorczynski) |
| for doing the heavy lifting for that! |
| |
| New features: |
| |
| * [FEATURE #649](https://github.com/rust-lang/regex/issues/649): |
| Support `[`, `]` and `.` in capture group names. |
| * [FEATURE #687](https://github.com/rust-lang/regex/issues/687): |
| Add `is_empty` predicate to `RegexSet`. |
| * [FEATURE #689](https://github.com/rust-lang/regex/issues/689): |
| Implement `Clone` for `SubCaptureMatches`. |
| * [FEATURE #715](https://github.com/rust-lang/regex/issues/715): |
| Add `empty` constructor to `RegexSet` for convenience. |
| |
| Bug fixes: |
| |
| * [BUG #694](https://github.com/rust-lang/regex/issues/694): |
| Fix doc example for `Replacer::replace_append`. |
| * [BUG #698](https://github.com/rust-lang/regex/issues/698): |
| Clarify docs for `s` flag when using a `bytes::Regex`. |
| * [BUG #711](https://github.com/rust-lang/regex/issues/711): |
| Clarify `is_match` docs to indicate that it can match anywhere in string. |
| |
| |
| 1.3.9 (2020-05-28) |
| ================== |
| This release fixes a MSRV (Minimum Support Rust Version) regression in the |
| 1.3.8 release. Namely, while 1.3.8 compiles on Rust 1.28, it actually does not |
| compile on other Rust versions, such as Rust 1.39. |
| |
| Bug fixes: |
| |
| * [BUG #685](https://github.com/rust-lang/regex/issues/685): |
| Remove use of `doc_comment` crate, which cannot be used before Rust 1.43. |
| |
| |
| 1.3.8 (2020-05-28) |
| ================== |
| This release contains a couple of important bug fixes driven |
| by better support for empty-subexpressions in regexes. For |
| example, regexes like `b|` are now allowed. Major thanks to |
| [@sliquister](https://github.com/sliquister) for implementing support for this |
| in [#677](https://github.com/rust-lang/regex/pull/677). |
| |
| Bug fixes: |
| |
| * [BUG #523](https://github.com/rust-lang/regex/pull/523): |
| Add note to documentation that spaces can be escaped in `x` mode. |
| * [BUG #524](https://github.com/rust-lang/regex/issues/524): |
| Add support for empty sub-expressions, including empty alternations. |
| * [BUG #659](https://github.com/rust-lang/regex/issues/659): |
| Fix match bug caused by an empty sub-expression miscompilation. |
| |
| |
| 1.3.7 (2020-04-17) |
| ================== |
| This release contains a small bug fix that fixes how `regex` forwards crate |
| features to `regex-syntax`. In particular, this will reduce recompilations in |
| some cases. |
| |
| Bug fixes: |
| |
| * [BUG #665](https://github.com/rust-lang/regex/pull/665): |
| Fix feature forwarding to `regex-syntax`. |
| |
| |
| 1.3.6 (2020-03-24) |
| ================== |
| This release contains a sizable (~30%) performance improvement when compiling |
| some kinds of large regular expressions. |
| |
| Performance improvements: |
| |
| * [PERF #657](https://github.com/rust-lang/regex/pull/657): |
| Improvement performance of compiling large regular expressions. |
| |
| |
| 1.3.5 (2020-03-12) |
| ================== |
| This release updates this crate to Unicode 13. |
| |
| New features: |
| |
| * [FEATURE #653](https://github.com/rust-lang/regex/pull/653): |
| Update `regex-syntax` to Unicode 13. |
| |
| |
| 1.3.4 (2020-01-30) |
| ================== |
| This is a small bug fix release that fixes a bug related to the scoping of |
| flags in a regex. Namely, before this fix, a regex like `((?i)a)b)` would |
| match `aB` despite the fact that `b` should not be matched case insensitively. |
| |
| Bug fixes: |
| |
| * [BUG #640](https://github.com/rust-lang/regex/issues/640): |
| Fix bug related to the scoping of flags in a regex. |
| |
| |
| 1.3.3 (2020-01-09) |
| ================== |
| This is a small maintenance release that upgrades the dependency on |
| `thread_local` from `0.3` to `1.0`. The minimum supported Rust version remains |
| at Rust 1.28. |
| |
| |
| 1.3.2 (2020-01-09) |
| ================== |
| This is a small maintenance release with some house cleaning and bug fixes. |
| |
| New features: |
| |
| * [FEATURE #631](https://github.com/rust-lang/regex/issues/631): |
| Add a `Match::range` method an a `From<Match> for Range` impl. |
| |
| Bug fixes: |
| |
| * [BUG #521](https://github.com/rust-lang/regex/issues/521): |
| Corrects `/-/.splitn("a", 2)` to return `["a"]` instead of `["a", ""]`. |
| * [BUG #594](https://github.com/rust-lang/regex/pull/594): |
| Improve error reporting when writing `\p\`. |
| * [BUG #627](https://github.com/rust-lang/regex/issues/627): |
| Corrects `/-/.split("a-")` to return `["a", ""]` instead of `["a"]`. |
| * [BUG #633](https://github.com/rust-lang/regex/pull/633): |
| Squash deprecation warnings for the `std::error::Error::description` method. |
| |
| |
| 1.3.1 (2019-09-04) |
| ================== |
| This is a maintenance release with no changes in order to try to work-around |
| a [docs.rs/Cargo issue](https://github.com/rust-lang/docs.rs/issues/400). |
| |
| |
| 1.3.0 (2019-09-03) |
| ================== |
| This release adds a plethora of new crate features that permit users of regex |
| to shrink its size considerably, in exchange for giving up either functionality |
| (such as Unicode support) or runtime performance. When all such features are |
| disabled, the dependency tree for `regex` shrinks to exactly 1 crate |
| (`regex-syntax`). More information about the new crate features can be |
| [found in the docs](https://docs.rs/regex/*/#crate-features). |
| |
| Note that while this is a new minor version release, the minimum supported |
| Rust version for this crate remains at `1.28.0`. |
| |
| New features: |
| |
| * [FEATURE #474](https://github.com/rust-lang/regex/issues/474): |
| The `use_std` feature has been deprecated in favor of the `std` feature. |
| The `use_std` feature will be removed in regex 2. Until then, `use_std` will |
| remain as an alias for the `std` feature. |
| * [FEATURE #583](https://github.com/rust-lang/regex/issues/583): |
| Add a substantial number of crate features shrinking `regex`. |
| |
| |
| 1.2.1 (2019-08-03) |
| ================== |
| This release does a bit of house cleaning. Namely: |
| |
| * This repository is now using rustfmt. |
| * License headers have been removed from all files, in following suit with the |
| Rust project. |
| * Teddy has been removed from the `regex` crate, and is now part of the |
| `aho-corasick` crate. |
| [See `aho-corasick`'s new `packed` sub-module for details](https://docs.rs/aho-corasick/0.7.6/aho_corasick/packed/index.html). |
| * The `utf8-ranges` crate has been deprecated, with its functionality moving |
| into the |
| [`utf8` sub-module of `regex-syntax`](https://docs.rs/regex-syntax/0.6.11/regex_syntax/utf8/index.html). |
| * The `ucd-util` dependency has been dropped, in favor of implementing what |
| little we need inside of `regex-syntax` itself. |
| |
| In general, this is part of an ongoing (long term) effort to make optimizations |
| in the regex engine easier to reason about. The current code is too convoluted |
| and thus it is very easy to introduce new bugs. This simplification effort is |
| the primary motivation behind re-working the `aho-corasick` crate to not only |
| bundle algorithms like Teddy, but to also provide regex-like match semantics |
| automatically. |
| |
| Moving forward, the plan is to join up with the `bstr` and `regex-automata` |
| crates, with the former providing more sophisticated substring search |
| algorithms (thereby deleting existing code in `regex`) and the latter providing |
| ahead-of-time compiled DFAs for cases where they are inexpensive to compute. |
| |
| |
| 1.2.0 (2019-07-20) |
| ================== |
| This release updates regex's minimum supported Rust version to 1.28, which was |
| release almost 1 year ago. This release also updates regex's Unicode data |
| tables to 12.1.0. |
| |
| |
| 1.1.9 (2019-07-06) |
| ================== |
| This release contains a bug fix that caused regex's tests to fail, due to a |
| dependency on an unreleased behavior in regex-syntax. |
| |
| * [BUG #593](https://github.com/rust-lang/regex/issues/593): |
| Move an integration-style test on error messages into regex-syntax. |
| |
| |
| 1.1.8 (2019-07-04) |
| ================== |
| This release contains a few small internal refactorings. One of which fixes |
| an instance of undefined behavior in a part of the SIMD code. |
| |
| Bug fixes: |
| |
| * [BUG #545](https://github.com/rust-lang/regex/issues/545): |
| Improves error messages when a repetition operator is used without a number. |
| * [BUG #588](https://github.com/rust-lang/regex/issues/588): |
| Removes use of a repr(Rust) union used for type punning in the Teddy matcher. |
| * [BUG #591](https://github.com/rust-lang/regex/issues/591): |
| Update docs for running benchmarks and improve failure modes. |
| |
| |
| 1.1.7 (2019-06-09) |
| ================== |
| This release fixes up a few warnings as a result of recent deprecations. |
| |
| |
| 1.1.6 (2019-04-16) |
| ================== |
| This release fixes a regression introduced by a bug fix (for |
| [BUG #557](https://github.com/rust-lang/regex/issues/557)) which could cause |
| the regex engine to enter an infinite loop. This bug was originally |
| [reported against ripgrep](https://github.com/BurntSushi/ripgrep/issues/1247). |
| |
| |
| 1.1.5 (2019-04-01) |
| ================== |
| This release fixes a bug in regex's dependency specification where it requires |
| a newer version of regex-syntax, but this wasn't communicated correctly in the |
| Cargo.toml. This would have been caught by a minimal version check, but this |
| check was disabled because the `rand` crate itself advertises incorrect |
| dependency specifications. |
| |
| Bug fixes: |
| |
| * [BUG #570](https://github.com/rust-lang/regex/pull/570): |
| Fix regex-syntax minimal version. |
| |
| |
| 1.1.4 (2019-03-31) |
| ================== |
| This release fixes a backwards compatibility regression where Regex was no |
| longer UnwindSafe. This was caused by the upgrade to aho-corasick 0.7, whose |
| AhoCorasick type was itself not UnwindSafe. This has been fixed in aho-corasick |
| 0.7.4, which we now require. |
| |
| Bug fixes: |
| |
| * [BUG #568](https://github.com/rust-lang/regex/pull/568): |
| Fix an API regression where Regex was no longer UnwindSafe. |
| |
| |
| 1.1.3 (2019-03-30) |
| ================== |
| This releases fixes a few bugs and adds a performance improvement when a regex |
| is a simple alternation of literals. |
| |
| Performance improvements: |
| |
| * [OPT #566](https://github.com/rust-lang/regex/pull/566): |
| Upgrades `aho-corasick` to 0.7 and uses it for `foo|bar|...|quux` regexes. |
| |
| Bug fixes: |
| |
| * [BUG #527](https://github.com/rust-lang/regex/issues/527): |
| Fix a bug where the parser would panic on patterns like `((?x))`. |
| * [BUG #555](https://github.com/rust-lang/regex/issues/555): |
| Fix a bug where the parser would panic on patterns like `(?m){1,1}`. |
| * [BUG #557](https://github.com/rust-lang/regex/issues/557): |
| Fix a bug where captures could lead to an incorrect match. |
| |
| |
| 1.1.2 (2019-02-27) |
| ================== |
| This release fixes a bug found in the fix introduced in 1.1.1. |
| |
| Bug fixes: |
| |
| * [BUG edf45e6f](https://github.com/rust-lang/regex/commit/edf45e6f): |
| Fix bug introduced in reverse suffix literal matcher in the 1.1.1 release. |
| |
| |
| 1.1.1 (2019-02-27) |
| ================== |
| This is a small release with one fix for a bug caused by literal optimizations. |
| |
| Bug fixes: |
| |
| * [BUG 661bf53d](https://github.com/rust-lang/regex/commit/661bf53d): |
| Fixes a bug in the reverse suffix literal optimization. This was originally |
| reported |
| [against ripgrep](https://github.com/BurntSushi/ripgrep/issues/1203). |
| |
| |
| 1.1.0 (2018-11-30) |
| ================== |
| This is a small release with a couple small enhancements. This release also |
| increases the minimal supported Rust version (MSRV) to 1.24.1 (from 1.20.0). In |
| accordance with this crate's MSRV policy, this release bumps the minor version |
| number. |
| |
| Performance improvements: |
| |
| * [OPT #511](https://github.com/rust-lang/regex/pull/511), |
| [OPT #540](https://github.com/rust-lang/regex/pull/540): |
| Improve lazy DFA construction for large regex sets. |
| |
| New features: |
| |
| * [FEATURE #538](https://github.com/rust-lang/regex/pull/538): |
| Add Emoji and "break" Unicode properties. See [UNICODE.md](UNICODE.md). |
| |
| Bug fixes: |
| |
| * [BUG #530](https://github.com/rust-lang/regex/pull/530): |
| Add Unicode license (for data tables). |
| * Various typo/doc fixups. |
| |
| |
| 1.0.6 (2018-11-06) |
| ================== |
| This is a small release. |
| |
| Performance improvements: |
| |
| * [OPT #513](https://github.com/rust-lang/regex/pull/513): |
| Improve performance of compiling large Unicode classes by 8-10%. |
| |
| Bug fixes: |
| |
| * [BUG #533](https://github.com/rust-lang/regex/issues/533): |
| Fix definition of `[[:blank:]]` class that regressed in `regex-syntax 0.5`. |
| |
| |
| 1.0.5 (2018-09-06) |
| ================== |
| This is a small release with an API enhancement. |
| |
| New features: |
| |
| * [FEATURE #509](https://github.com/rust-lang/regex/pull/509): |
| Generalize impls of the `Replacer` trait. |
| |
| |
| 1.0.4 (2018-08-25) |
| ================== |
| This is a small release that bumps the quickcheck dependency. |
| |
| |
| 1.0.3 (2018-08-24) |
| ================== |
| This is a small bug fix release. |
| |
| Bug fixes: |
| |
| * [BUG #504](https://github.com/rust-lang/regex/pull/504): |
| Fix for Cargo's "minimal version" support. |
| * [BUG 1e39165f](https://github.com/rust-lang/regex/commit/1e39165f): |
| Fix doc examples for byte regexes. |
| |
| |
| 1.0.2 (2018-07-18) |
| ================== |
| This release exposes some new lower level APIs on `Regex` that permit |
| amortizing allocation and controlling the location at which a search is |
| performed in a more granular way. Most users of the regex crate will not |
| need or want to use these APIs. |
| |
| New features: |
| |
| * [FEATURE #493](https://github.com/rust-lang/regex/pull/493): |
| Add a few lower level APIs for amortizing allocation and more fine grained |
| searching. |
| |
| Bug fixes: |
| |
| * [BUG 3981d2ad](https://github.com/rust-lang/regex/commit/3981d2ad): |
| Correct outdated documentation on `RegexBuilder::dot_matches_new_line`. |
| * [BUG 7ebe4ae0](https://github.com/rust-lang/regex/commit/7ebe4ae0): |
| Correct outdated documentation on `Parser::allow_invalid_utf8` in the |
| `regex-syntax` crate. |
| * [BUG 24c7770b](https://github.com/rust-lang/regex/commit/24c7770b): |
| Fix a bug in the HIR printer where it wouldn't correctly escape meta |
| characters in character classes. |
| |
| |
| 1.0.1 (2018-06-19) |
| ================== |
| This release upgrades regex's Unicode tables to Unicode 11, and enables SIMD |
| optimizations automatically on Rust stable (1.27 or newer). |
| |
| New features: |
| |
| * [FEATURE #486](https://github.com/rust-lang/regex/pull/486): |
| Implement `size_hint` on `RegexSet` match iterators. |
| * [FEATURE #488](https://github.com/rust-lang/regex/pull/488): |
| Update Unicode tables for Unicode 11. |
| * [FEATURE #490](https://github.com/rust-lang/regex/pull/490): |
| SIMD optimizations are now enabled automatically in Rust stable, for versions |
| 1.27 and up. No compilation flags or features need to be set. CPU support |
| SIMD is detected automatically at runtime. |
| |
| Bug fixes: |
| |
| * [BUG #482](https://github.com/rust-lang/regex/pull/482): |
| Present a better compilation error when the `use_std` feature isn't used. |
| |
| |
| 1.0.0 (2018-05-01) |
| ================== |
| This release marks the 1.0 release of regex. |
| |
| While this release includes some breaking changes, most users of older versions |
| of the regex library should be able to migrate to 1.0 by simply bumping the |
| version number. The important changes are as follows: |
| |
| * We adopt Rust 1.20 as the new minimum supported version of Rust for regex. |
| We also tentativley adopt a policy that permits bumping the minimum supported |
| version of Rust in minor version releases of regex, but no patch releases. |
| That is, with respect to semver, we do not strictly consider bumping the |
| minimum version of Rust to be a breaking change, but adopt a conservative |
| stance as a compromise. |
| * Octal syntax in regular expressions has been disabled by default. This |
| permits better error messages that inform users that backreferences aren't |
| available. Octal syntax can be re-enabled via the corresponding option on |
| `RegexBuilder`. |
| * `(?-u:\B)` is no longer allowed in Unicode regexes since it can match at |
| invalid UTF-8 code unit boundaries. `(?-u:\b)` is still allowed in Unicode |
| regexes. |
| * The `From<regex_syntax::Error>` impl has been removed. This formally removes |
| the public dependency on `regex-syntax`. |
| * A new feature, `use_std`, has been added and enabled by default. Disabling |
| the feature will result in a compilation error. In the future, this may |
| permit us to support `no_std` environments (w/ `alloc`) in a backwards |
| compatible way. |
| |
| For more information and discussion, please see |
| [1.0 release tracking issue](https://github.com/rust-lang/regex/issues/457). |
| |
| |
| 0.2.11 (2018-05-01) |
| =================== |
| This release primarily contains bug fixes. Some of them resolve bugs where |
| the parser could panic. |
| |
| New features: |
| |
| * [FEATURE #459](https://github.com/rust-lang/regex/pull/459): |
| Include C++'s standard regex library and Boost's regex library in the |
| benchmark harness. We now include D/libphobos, C++/std, C++/boost, Oniguruma, |
| PCRE1, PCRE2, RE2 and Tcl in the harness. |
| |
| Bug fixes: |
| |
| * [BUG #445](https://github.com/rust-lang/regex/issues/445): |
| Clarify order of indices returned by RegexSet match iterator. |
| * [BUG #461](https://github.com/rust-lang/regex/issues/461): |
| Improve error messages for invalid regexes like `[\d-a]`. |
| * [BUG #464](https://github.com/rust-lang/regex/issues/464): |
| Fix a bug in the error message pretty printer that could cause a panic when |
| a regex contained a literal `\n` character. |
| * [BUG #465](https://github.com/rust-lang/regex/issues/465): |
| Fix a panic in the parser that was caused by applying a repetition operator |
| to `(?flags)`. |
| * [BUG #466](https://github.com/rust-lang/regex/issues/466): |
| Fix a bug where `\pC` was not recognized as an alias for `\p{Other}`. |
| * [BUG #470](https://github.com/rust-lang/regex/pull/470): |
| Fix a bug where literal searches did more work than necessary for anchored |
| regexes. |
| |
| |
| 0.2.10 (2018-03-16) |
| =================== |
| This release primarily updates the regex crate to changes made in `std::arch` |
| on nightly Rust. |
| |
| New features: |
| |
| * [FEATURE #458](https://github.com/rust-lang/regex/pull/458): |
| The `Hir` type in `regex-syntax` now has a printer. |
| |
| |
| 0.2.9 (2018-03-12) |
| ================== |
| This release introduces a new nightly only feature, `unstable`, which enables |
| SIMD optimizations for certain types of regexes. No additional compile time |
| options are necessary, and the regex crate will automatically choose the |
| best CPU features at run time. As a result, the `simd` (nightly only) crate |
| dependency has been dropped. |
| |
| New features: |
| |
| * [FEATURE #456](https://github.com/rust-lang/regex/pull/456): |
| The regex crate now includes AVX2 optimizations in addition to the extant |
| SSSE3 optimization. |
| |
| Bug fixes: |
| |
| * [BUG #455](https://github.com/rust-lang/regex/pull/455): |
| Fix a bug where `(?x)[ / - ]` failed to parse. |
| |
| |
| 0.2.8 (2018-03-12) |
| ================== |
| Bug gixes: |
| |
| * [BUG #454](https://github.com/rust-lang/regex/pull/454): |
| Fix a bug in the nest limit checker being too aggressive. |
| |
| |
| 0.2.7 (2018-03-07) |
| ================== |
| This release includes a ground-up rewrite of the regex-syntax crate, which has |
| been in development for over a year. |
| 731 |
| New features: |
| |
| * Error messages for invalid regexes have been greatly improved. You get these |
| automatically; you don't need to do anything. In addition to better |
| formatting, error messages will now explicitly call out the use of look |
| around. When regex 1.0 is released, this will happen for backreferences as |
| well. |
| * Full support for intersection, difference and symmetric difference of |
| character classes. These can be used via the `&&`, `--` and `~~` binary |
| operators within classes. |
| * A Unicode Level 1 conformat implementation of `\p{..}` character classes. |
| Things like `\p{scx:Hira}`, `\p{age:3.2}` or `\p{Changes_When_Casefolded}` |
| now work. All property name and value aliases are supported, and properties |
| are selected via loose matching. e.g., `\p{Greek}` is the same as |
| `\p{G r E e K}`. |
| * A new `UNICODE.md` document has been added to this repository that |
| exhaustively documents support for UTS#18. |
| * Empty sub-expressions are now permitted in most places. That is, `()+` is |
| now a valid regex. |
| * Almost everything in regex-syntax now uses constant stack space, even when |
| performing analysis that requires structural induction. This reduces the risk |
| of a user provided regular expression causing a stack overflow. |
| * [FEATURE #174](https://github.com/rust-lang/regex/issues/174): |
| The `Ast` type in `regex-syntax` now contains span information. |
| * [FEATURE #424](https://github.com/rust-lang/regex/issues/424): |
| Support `\u`, `\u{...}`, `\U` and `\U{...}` syntax for specifying code points |
| in a regular expression. |
| * [FEATURE #449](https://github.com/rust-lang/regex/pull/449): |
| Add a `Replace::by_ref` adapter for use of a replacer without consuming it. |
| |
| Bug fixes: |
| |
| * [BUG #446](https://github.com/rust-lang/regex/issues/446): |
| We re-enable the Boyer-Moore literal matcher. |
| |
| |
| 0.2.6 (2018-02-08) |
| ================== |
| Bug fixes: |
| |
| * [BUG #446](https://github.com/rust-lang/regex/issues/446): |
| Fixes a bug in the new Boyer-Moore searcher that results in a match failure. |
| We fix this bug by temporarily disabling Boyer-Moore. |
| |
| |
| 0.2.5 (2017-12-30) |
| ================== |
| Bug fixes: |
| |
| * [BUG #437](https://github.com/rust-lang/regex/issues/437): |
| Fixes a bug in the new Boyer-Moore searcher that results in a panic. |
| |
| |
| 0.2.4 (2017-12-30) |
| ================== |
| New features: |
| |
| * [FEATURE #348](https://github.com/rust-lang/regex/pull/348): |
| Improve performance for capture searches on anchored regex. |
| (Contributed by @ethanpailes. Nice work!) |
| * [FEATURE #419](https://github.com/rust-lang/regex/pull/419): |
| Expand literal searching to include Tuned Boyer-Moore in some cases. |
| (Contributed by @ethanpailes. Nice work!) |
| |
| Bug fixes: |
| |
| * [BUG](https://github.com/rust-lang/regex/pull/436): |
| The regex compiler plugin has been removed. |
| * [BUG](https://github.com/rust-lang/regex/pull/436): |
| `simd` has been bumped to `0.2.1`, which fixes a Rust nightly build error. |
| * [BUG](https://github.com/rust-lang/regex/pull/436): |
| Bring the benchmark harness up to date. |
| |
| |
| 0.2.3 (2017-11-30) |
| ================== |
| New features: |
| |
| * [FEATURE #374](https://github.com/rust-lang/regex/pull/374): |
| Add `impl From<Match> for &str`. |
| * [FEATURE #380](https://github.com/rust-lang/regex/pull/380): |
| Derive `Clone` and `PartialEq` on `Error`. |
| * [FEATURE #400](https://github.com/rust-lang/regex/pull/400): |
| Update to Unicode 10. |
| |
| Bug fixes: |
| |
| * [BUG #375](https://github.com/rust-lang/regex/issues/375): |
| Fix a bug that prevented the bounded backtracker from terminating. |
| * [BUG #393](https://github.com/rust-lang/regex/issues/393), |
| [BUG #394](https://github.com/rust-lang/regex/issues/394): |
| Fix bug with `replace` methods for empty matches. |
| |
| |
| 0.2.2 (2017-05-21) |
| ================== |
| New features: |
| |
| * [FEATURE #341](https://github.com/rust-lang/regex/issues/341): |
| Support nested character classes and intersection operation. |
| For example, `[\p{Greek}&&\pL]` matches greek letters and |
| `[[0-9]&&[^4]]` matches every decimal digit except `4`. |
| (Much thanks to @robinst, who contributed this awesome feature.) |
| |
| Bug fixes: |
| |
| * [BUG #321](https://github.com/rust-lang/regex/issues/321): |
| Fix bug in literal extraction and UTF-8 decoding. |
| * [BUG #326](https://github.com/rust-lang/regex/issues/326): |
| Add documentation tip about the `(?x)` flag. |
| * [BUG #333](https://github.com/rust-lang/regex/issues/333): |
| Show additional replacement example using curly braces. |
| * [BUG #334](https://github.com/rust-lang/regex/issues/334): |
| Fix bug when resolving captures after a match. |
| * [BUG #338](https://github.com/rust-lang/regex/issues/338): |
| Add example that uses `Captures::get` to API documentation. |
| * [BUG #353](https://github.com/rust-lang/regex/issues/353): |
| Fix RegexSet bug that caused match failure in some cases. |
| * [BUG #354](https://github.com/rust-lang/regex/pull/354): |
| Fix panic in parser when `(?x)` is used. |
| * [BUG #358](https://github.com/rust-lang/regex/issues/358): |
| Fix literal optimization bug with RegexSet. |
| * [BUG #359](https://github.com/rust-lang/regex/issues/359): |
| Fix example code in README. |
| * [BUG #365](https://github.com/rust-lang/regex/pull/365): |
| Fix bug in `rure_captures_len` in the C binding. |
| * [BUG #367](https://github.com/rust-lang/regex/issues/367): |
| Fix byte class bug that caused a panic. |
| |
| |
| 0.2.1 |
| ===== |
| One major bug with `replace_all` has been fixed along with a couple of other |
| touchups. |
| |
| * [BUG #312](https://github.com/rust-lang/regex/issues/312): |
| Fix documentation for `NoExpand` to reference correct lifetime parameter. |
| * [BUG #314](https://github.com/rust-lang/regex/issues/314): |
| Fix a bug with `replace_all` when replacing a match with the empty string. |
| * [BUG #316](https://github.com/rust-lang/regex/issues/316): |
| Note a missing breaking change from the `0.2.0` CHANGELOG entry. |
| (`RegexBuilder::compile` was renamed to `RegexBuilder::build`.) |
| * [BUG #324](https://github.com/rust-lang/regex/issues/324): |
| Compiling `regex` should only require one version of `memchr` crate. |
| |
| |
| 0.2.0 |
| ===== |
| This is a new major release of the regex crate, and is an implementation of the |
| [regex 1.0 RFC](https://github.com/rust-lang/rfcs/blob/master/text/1620-regex-1.0.md). |
| We are releasing a `0.2` first, and if there are no major problems, we will |
| release a `1.0` shortly. For `0.2`, the minimum *supported* Rust version is |
| 1.12. |
| |
| There are a number of **breaking changes** in `0.2`. They are split into two |
| types. The first type correspond to breaking changes in regular expression |
| syntax. The second type correspond to breaking changes in the API. |
| |
| Breaking changes for regex syntax: |
| |
| * POSIX character classes now require double bracketing. Previously, the regex |
| `[:upper:]` would parse as the `upper` POSIX character class. Now it parses |
| as the character class containing the characters `:upper:`. The fix to this |
| change is to use `[[:upper:]]` instead. Note that variants like |
| `[[:upper:][:blank:]]` continue to work. |
| * The character `[` must always be escaped inside a character class. |
| * The characters `&`, `-` and `~` must be escaped if any one of them are |
| repeated consecutively. For example, `[&]`, `[\&]`, `[\&\&]`, `[&-&]` are all |
| equivalent while `[&&]` is illegal. (The motivation for this and the prior |
| change is to provide a backwards compatible path for adding character class |
| set notation.) |
| * A `bytes::Regex` now has Unicode mode enabled by default (like the main |
| `Regex` type). This means regexes compiled with `bytes::Regex::new` that |
| don't have the Unicode flag set should add `(?-u)` to recover the original |
| behavior. |
| |
| Breaking changes for the regex API: |
| |
| * `find` and `find_iter` now **return `Match` values instead of |
| `(usize, usize)`.** `Match` values have `start` and `end` methods, which |
| return the match offsets. `Match` values also have an `as_str` method, |
| which returns the text of the match itself. |
| * The `Captures` type now only provides a single iterator over all capturing |
| matches, which should replace uses of `iter` and `iter_pos`. Uses of |
| `iter_named` should use the `capture_names` method on `Regex`. |
| * The `at` method on the `Captures` type has been renamed to `get`, and it |
| now returns a `Match`. Similarly, the `name` method on `Captures` now returns |
| a `Match`. |
| * The `replace` methods now return `Cow` values. The `Cow::Borrowed` variant |
| is returned when no replacements are made. |
| * The `Replacer` trait has been completely overhauled. This should only |
| impact clients that implement this trait explicitly. Standard uses of |
| the `replace` methods should continue to work unchanged. If you implement |
| the `Replacer` trait, please consult the new documentation. |
| * The `quote` free function has been renamed to `escape`. |
| * The `Regex::with_size_limit` method has been removed. It is replaced by |
| `RegexBuilder::size_limit`. |
| * The `RegexBuilder` type has switched from owned `self` method receivers to |
| `&mut self` method receivers. Most uses will continue to work unchanged, but |
| some code may require naming an intermediate variable to hold the builder. |
| * The `compile` method on `RegexBuilder` has been renamed to `build`. |
| * The free `is_match` function has been removed. It is replaced by compiling |
| a `Regex` and calling its `is_match` method. |
| * The `PartialEq` and `Eq` impls on `Regex` have been dropped. If you relied |
| on these impls, the fix is to define a wrapper type around `Regex`, impl |
| `Deref` on it and provide the necessary impls. |
| * The `is_empty` method on `Captures` has been removed. This always returns |
| `false`, so its use is superfluous. |
| * The `Syntax` variant of the `Error` type now contains a string instead of |
| a `regex_syntax::Error`. If you were examining syntax errors more closely, |
| you'll need to explicitly use the `regex_syntax` crate to re-parse the regex. |
| * The `InvalidSet` variant of the `Error` type has been removed since it is |
| no longer used. |
| * Most of the iterator types have been renamed to match conventions. If you |
| were using these iterator types explicitly, please consult the documentation |
| for its new name. For example, `RegexSplits` has been renamed to `Split`. |
| |
| A number of bugs have been fixed: |
| |
| * [BUG #151](https://github.com/rust-lang/regex/issues/151): |
| The `Replacer` trait has been changed to permit the caller to control |
| allocation. |
| * [BUG #165](https://github.com/rust-lang/regex/issues/165): |
| Remove the free `is_match` function. |
| * [BUG #166](https://github.com/rust-lang/regex/issues/166): |
| Expose more knobs (available in `0.1`) and remove `with_size_limit`. |
| * [BUG #168](https://github.com/rust-lang/regex/issues/168): |
| Iterators produced by `Captures` now have the correct lifetime parameters. |
| * [BUG #175](https://github.com/rust-lang/regex/issues/175): |
| Fix a corner case in the parsing of POSIX character classes. |
| * [BUG #178](https://github.com/rust-lang/regex/issues/178): |
| Drop the `PartialEq` and `Eq` impls on `Regex`. |
| * [BUG #179](https://github.com/rust-lang/regex/issues/179): |
| Remove `is_empty` from `Captures` since it always returns false. |
| * [BUG #276](https://github.com/rust-lang/regex/issues/276): |
| Position of named capture can now be retrieved from a `Captures`. |
| * [BUG #296](https://github.com/rust-lang/regex/issues/296): |
| Remove winapi/kernel32-sys dependency on UNIX. |
| * [BUG #307](https://github.com/rust-lang/regex/issues/307): |
| Fix error on emscripten. |
| |
| |
| 0.1.80 |
| ====== |
| * [PR #292](https://github.com/rust-lang/regex/pull/292): |
| Fixes bug #291, which was introduced by PR #290. |
| |
| 0.1.79 |
| ====== |
| * Require regex-syntax 0.3.8. |
| |
| 0.1.78 |
| ====== |
| * [PR #290](https://github.com/rust-lang/regex/pull/290): |
| Fixes bug #289, which caused some regexes with a certain combination |
| of literals to match incorrectly. |
| |
| 0.1.77 |
| ====== |
| * [PR #281](https://github.com/rust-lang/regex/pull/281): |
| Fixes bug #280 by disabling all literal optimizations when a pattern |
| is partially anchored. |
| |
| 0.1.76 |
| ====== |
| * Tweak criteria for using the Teddy literal matcher. |
| |
| 0.1.75 |
| ====== |
| * [PR #275](https://github.com/rust-lang/regex/pull/275): |
| Improves match verification performance in the Teddy SIMD searcher. |
| * [PR #278](https://github.com/rust-lang/regex/pull/278): |
| Replaces slow substring loop in the Teddy SIMD searcher with Aho-Corasick. |
| * Implemented DoubleEndedIterator on regex set match iterators. |
| |
| 0.1.74 |
| ====== |
| * Release regex-syntax 0.3.5 with a minor bug fix. |
| * Fix bug #272. |
| * Fix bug #277. |
| * [PR #270](https://github.com/rust-lang/regex/pull/270): |
| Fixes bugs #264, #268 and an unreported where the DFA cache size could be |
| drastically under estimated in some cases (leading to high unexpected memory |
| usage). |
| |
| 0.1.73 |
| ====== |
| * Release `regex-syntax 0.3.4`. |
| * Bump `regex-syntax` dependency version for `regex` to `0.3.4`. |
| |
| 0.1.72 |
| ====== |
| * [PR #262](https://github.com/rust-lang/regex/pull/262): |
| Fixes a number of small bugs caught by fuzz testing (AFL). |
| |
| 0.1.71 |
| ====== |
| * [PR #236](https://github.com/rust-lang/regex/pull/236): |
| Fix a bug in how suffix literals were extracted, which could lead |
| to invalid match behavior in some cases. |
| |
| 0.1.70 |
| ====== |
| * [PR #231](https://github.com/rust-lang/regex/pull/231): |
| Add SIMD accelerated multiple pattern search. |
| * [PR #228](https://github.com/rust-lang/regex/pull/228): |
| Reintroduce the reverse suffix literal optimization. |
| * [PR #226](https://github.com/rust-lang/regex/pull/226): |
| Implements NFA state compression in the lazy DFA. |
| * [PR #223](https://github.com/rust-lang/regex/pull/223): |
| A fully anchored RegexSet can now short-circuit. |
| |
| 0.1.69 |
| ====== |
| * [PR #216](https://github.com/rust-lang/regex/pull/216): |
| Tweak the threshold for running backtracking. |
| * [PR #217](https://github.com/rust-lang/regex/pull/217): |
| Add upper limit (from the DFA) to capture search (for the NFA). |
| * [PR #218](https://github.com/rust-lang/regex/pull/218): |
| Add rure, a C API. |
| |
| 0.1.68 |
| ====== |
| * [PR #210](https://github.com/rust-lang/regex/pull/210): |
| Fixed a performance bug in `bytes::Regex::replace` where `extend` was used |
| instead of `extend_from_slice`. |
| * [PR #211](https://github.com/rust-lang/regex/pull/211): |
| Fixed a bug in the handling of word boundaries in the DFA. |
| * [PR #213](https://github.com/rust-lang/pull/213): |
| Added RE2 and Tcl to the benchmark harness. Also added a CLI utility from |
| running regexes using any of the following regex engines: PCRE1, PCRE2, |
| Oniguruma, RE2, Tcl and of course Rust's own regexes. |
| |
| 0.1.67 |
| ====== |
| * [PR #201](https://github.com/rust-lang/regex/pull/201): |
| Fix undefined behavior in the `regex!` compiler plugin macro. |
| * [PR #205](https://github.com/rust-lang/regex/pull/205): |
| More improvements to DFA performance. Competitive with RE2. See PR for |
| benchmarks. |
| * [PR #209](https://github.com/rust-lang/regex/pull/209): |
| Release 0.1.66 was semver incompatible since it required a newer version |
| of Rust than previous releases. This PR fixes that. (And `0.1.66` was |
| yanked.) |
| |
| 0.1.66 |
| ====== |
| * Speculative support for Unicode word boundaries was added to the DFA. This |
| should remove the last common case that disqualified use of the DFA. |
| * An optimization that scanned for suffix literals and then matched the regular |
| expression in reverse was removed because it had worst case quadratic time |
| complexity. It was replaced with a more limited optimization where, given any |
| regex of the form `re$`, it will be matched in reverse from the end of the |
| haystack. |
| * [PR #202](https://github.com/rust-lang/regex/pull/202): |
| The inner loop of the DFA was heavily optimized to improve cache locality |
| and reduce the overall number of instructions run on each iteration. This |
| represents the first use of `unsafe` in `regex` (to elide bounds checks). |
| * [PR #200](https://github.com/rust-lang/regex/pull/200): |
| Use of the `mempool` crate (which used thread local storage) was replaced |
| with a faster version of a similar API in @Amanieu's `thread_local` crate. |
| It should reduce contention when using a regex from multiple threads |
| simultaneously. |
| * PCRE2 JIT benchmarks were added. A benchmark comparison can be found |
| [here](https://gist.github.com/anonymous/14683c01993e91689f7206a18675901b). |
| (Includes a comparison with PCRE1's JIT and Oniguruma.) |
| * A bug where word boundaries weren't being matched correctly in the DFA was |
| fixed. This only affected use of `bytes::Regex`. |
| * [#160](https://github.com/rust-lang/regex/issues/160): |
| `Captures` now has a `Debug` impl. |