11.7.3 (2023-03-24)
2==================
3This is a small release that fixes a bug in `Regex::shortest_match_at` that
4could cause it to panic, even when the offset given is valid.
5
6Bug fixes:
7
8* [BUG #969](https://github.com/rust-lang/regex/issues/969):
9  Fix a bug in how the reverse DFA was called for `Regex::shortest_match_at`.
10
11
121.7.2 (2023-03-21)
13==================
14This is a small release that fixes a failing test on FreeBSD.
15
16Bug fixes:
17
18* [BUG #967](https://github.com/rust-lang/regex/issues/967):
19  Fix "no stack overflow" test which can fail due to the small stack size.
20
21
221.7.1 (2023-01-09)
23==================
24This release was done principally to try and fix the doc.rs rendering for the
25regex crate.
26
27Performance improvements:
28
29* [PERF #930](https://github.com/rust-lang/regex/pull/930):
30  Optimize `replacen`. This also applies to `replace`, but not `replace_all`.
31
32Bug fixes:
33
34* [BUG #945](https://github.com/rust-lang/regex/issues/945):
35  Maybe fix rustdoc rendering by just bumping a new release?
36
37
381.7.0 (2022-11-05)
39==================
40This release principally includes an upgrade to Unicode 15.
41
42New features:
43
44* [FEATURE #832](https://github.com/rust-lang/regex/issues/916):
45  Upgrade to Unicode 15.
46
47
481.6.0 (2022-07-05)
49==================
50This release principally includes an upgrade to Unicode 14.
51
52New features:
53
54* [FEATURE #832](https://github.com/rust-lang/regex/pull/832):
55  Clarify that `Captures::len` includes all groups, not just matching groups.
56* [FEATURE #857](https://github.com/rust-lang/regex/pull/857):
57  Add an `ExactSizeIterator` impl for `SubCaptureMatches`.
58* [FEATURE #861](https://github.com/rust-lang/regex/pull/861):
59  Improve `RegexSet` documentation examples.
60* [FEATURE #877](https://github.com/rust-lang/regex/issues/877):
61  Upgrade to Unicode 14.
62
63Bug fixes:
64
65* [BUG #792](https://github.com/rust-lang/regex/issues/792):
66  Fix error message rendering bug.
67
68
691.5.6 (2022-05-20)
70==================
71This release includes a few bug fixes, including a bug that produced incorrect
72matches when a non-greedy `?` operator was used.
73
74* [BUG #680](https://github.com/rust-lang/regex/issues/680):
75  Fixes a bug where `[[:alnum:][:^ascii:]]` dropped `[:alnum:]` from the class.
76* [BUG #859](https://github.com/rust-lang/regex/issues/859):
77  Fixes a bug where `Hir::is_match_empty` returned `false` for `\b`.
78* [BUG #862](https://github.com/rust-lang/regex/issues/862):
79  Fixes a bug where 'ab??' matches 'ab' instead of 'a' in 'ab'.
80
81
821.5.5 (2022-03-08)
83==================
84This releases fixes a security bug in the regex compiler. This bug permits a
85vector for a denial-of-service attack in cases where the regex being compiled
86is untrusted. There are no known problems where the regex is itself trusted,
87including in cases of untrusted haystacks.
88
89* [SECURITY #GHSA-m5pq-gvj9-9vr8](https://github.com/rust-lang/regex/security/advisories/GHSA-m5pq-gvj9-9vr8):
90  Fixes a bug in the regex compiler where empty sub-expressions subverted the
91  existing mitigations in place to enforce a size limit on compiled regexes.
92  The Rust Security Response WG published an advisory about this:
93  https://groups.google.com/g/rustlang-security-announcements/c/NcNNL1Jq7Yw
94
95
961.5.4 (2021-05-06)
97==================
98This release fixes another compilation failure when building regex. This time,
99the fix is for when the `pattern` feature is enabled, which only works on
100nightly Rust. CI has been updated to test this case.
101
102* [BUG #772](https://github.com/rust-lang/regex/pull/772):
103  Fix build when `pattern` feature is enabled.
104
105
1061.5.3 (2021-05-01)
107==================
108This releases fixes a bug when building regex with only the `unicode-perl`
109feature. It turns out that while CI was building this configuration, it wasn't
110actually failing the overall build on a failed compilation.
111
112* [BUG #769](https://github.com/rust-lang/regex/issues/769):
113  Fix build in `regex-syntax` when only the `unicode-perl` feature is enabled.
114
115
1161.5.2 (2021-05-01)
117==================
118This release fixes a performance bug when Unicode word boundaries are used.
119Namely, for certain regexes on certain inputs, it's possible for the lazy DFA
120to stop searching (causing a fallback to a slower engine) when it doesn't
121actually need to.
122
123[PR #768](https://github.com/rust-lang/regex/pull/768) fixes the bug, which was
124originally reported in
125[ripgrep#1860](https://github.com/BurntSushi/ripgrep/issues/1860).
126
127
1281.5.1 (2021-04-30)
129==================
130This is a patch release that fixes a compilation error when the `perf-literal`
131feature is not enabled.
132
133
1341.5.0 (2021-04-30)
135==================
136This release primarily updates to Rust 2018 (finally) and bumps the MSRV to
137Rust 1.41 (from Rust 1.28). Rust 1.41 was chosen because it's still reasonably
138old, and is what's in Debian stable at the time of writing.
139
140This release also drops this crate's own bespoke substring search algorithms
141in favor of a new
142[`memmem` implementation provided by the `memchr` crate](https://docs.rs/memchr/2.4.0/memchr/memmem/index.html).
143This will change the performance profile of some regexes, sometimes getting a
144little worse, and hopefully more frequently, getting a lot better. Please
145report any serious performance regressions if you find them.
146
147
1481.4.6 (2021-04-22)
149==================
150This is a small patch release that fixes the compiler's size check on how much
151heap memory a regex uses. Previously, the compiler did not account for the
152heap usage of Unicode character classes. Now it does. It's possible that this
153may make some regexes fail to compile that previously did compile. If that
154happens, please file an issue.
155
156* [BUG OSS-fuzz#33579](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33579):
157  Some regexes can use more heap memory than one would expect.
158
159
1601.4.5 (2021-03-14)
161==================
162This is a small patch release that fixes a regression in the size of a `Regex`
163in the 1.4.4 release. Prior to 1.4.4, a `Regex` was 552 bytes. In the 1.4.4
164release, it was 856 bytes due to internal changes. In this release, a `Regex`
165is now 16 bytes. In general, the size of a `Regex` was never something that was
166on my radar, but this increased size in the 1.4.4 release seems to have crossed
167a threshold and resulted in stack overflows in some programs.
168
169* [BUG #750](https://github.com/rust-lang/regex/pull/750):
170  Fixes stack overflows seemingly caused by a large `Regex` size by decreasing
171  its size.
172
173
1741.4.4 (2021-03-11)
175==================
176This is a small patch release that contains some bug fixes. Notably, it also
177drops the `thread_local` (and `lazy_static`, via transitivity) dependencies.
178
179Bug fixes:
180
181* [BUG #362](https://github.com/rust-lang/regex/pull/362):
182  Memory leaks caused by an internal caching strategy should now be fixed.
183* [BUG #576](https://github.com/rust-lang/regex/pull/576):
184  All regex types now implement `UnwindSafe` and `RefUnwindSafe`.
185* [BUG #728](https://github.com/rust-lang/regex/pull/749):
186  Add missing `Replacer` impls for `Vec<u8>`, `String`, `Cow`, etc.
187
188
1891.4.3 (2021-01-08)
190==================
191This is a small patch release that adds some missing standard trait
192implementations for some types in the public API.
193
194Bug fixes:
195
196* [BUG #734](https://github.com/rust-lang/regex/pull/734):
197  Add `FusedIterator` and `ExactSizeIterator` impls to iterator types.
198* [BUG #735](https://github.com/rust-lang/regex/pull/735):
199  Add missing `Debug` impls to public API types.
200
201
2021.4.2 (2020-11-01)
203==================
204This is a small bug fix release that bans `\P{any}`. We previously banned empty
205classes like `[^\w\W]`, but missed the `\P{any}` case. In the future, we hope
206to permit empty classes.
207
208* [BUG #722](https://github.com/rust-lang/regex/issues/722):
209  Ban `\P{any}` to avoid a panic in the regex compiler. Found by OSS-Fuzz.
210
211
2121.4.1 (2020-10-13)
213==================
214This is a small bug fix release that makes `\p{cf}` work. Previously, it would
215report "property not found" even though `cf` is a valid abbreviation for the
216`Format` general category.
217
218* [BUG #719](https://github.com/rust-lang/regex/issues/719):
219  Fixes bug that prevented `\p{cf}` from working.
220
221
2221.4.0 (2020-10-11)
223==================
224This releases has a few minor documentation fixes as well as some very minor
225API additions. The MSRV remains at Rust 1.28 for now, but this is intended to
226increase to at least Rust 1.41.1 soon.
227
228This release also adds support for OSS-Fuzz. Kudos to
229[@DavidKorczynski](https://github.com/DavidKorczynski)
230for doing the heavy lifting for that!
231
232New features:
233
234* [FEATURE #649](https://github.com/rust-lang/regex/issues/649):
235  Support `[`, `]` and `.` in capture group names.
236* [FEATURE #687](https://github.com/rust-lang/regex/issues/687):
237  Add `is_empty` predicate to `RegexSet`.
238* [FEATURE #689](https://github.com/rust-lang/regex/issues/689):
239  Implement `Clone` for `SubCaptureMatches`.
240* [FEATURE #715](https://github.com/rust-lang/regex/issues/715):
241  Add `empty` constructor to `RegexSet` for convenience.
242
243Bug fixes:
244
245* [BUG #694](https://github.com/rust-lang/regex/issues/694):
246  Fix doc example for `Replacer::replace_append`.
247* [BUG #698](https://github.com/rust-lang/regex/issues/698):
248  Clarify docs for `s` flag when using a `bytes::Regex`.
249* [BUG #711](https://github.com/rust-lang/regex/issues/711):
250  Clarify `is_match` docs to indicate that it can match anywhere in string.
251
252
2531.3.9 (2020-05-28)
254==================
255This release fixes a MSRV (Minimum Support Rust Version) regression in the
2561.3.8 release. Namely, while 1.3.8 compiles on Rust 1.28, it actually does not
257compile on other Rust versions, such as Rust 1.39.
258
259Bug fixes:
260
261* [BUG #685](https://github.com/rust-lang/regex/issues/685):
262  Remove use of `doc_comment` crate, which cannot be used before Rust 1.43.
263
264
2651.3.8 (2020-05-28)
266==================
267This release contains a couple of important bug fixes driven
268by better support for empty-subexpressions in regexes. For
269example, regexes like `b|` are now allowed. Major thanks to
270[@sliquister](https://github.com/sliquister) for implementing support for this
271in [#677](https://github.com/rust-lang/regex/pull/677).
272
273Bug fixes:
274
275* [BUG #523](https://github.com/rust-lang/regex/pull/523):
276  Add note to documentation that spaces can be escaped in `x` mode.
277* [BUG #524](https://github.com/rust-lang/regex/issues/524):
278  Add support for empty sub-expressions, including empty alternations.
279* [BUG #659](https://github.com/rust-lang/regex/issues/659):
280  Fix match bug caused by an empty sub-expression miscompilation.
281
282
2831.3.7 (2020-04-17)
284==================
285This release contains a small bug fix that fixes how `regex` forwards crate
286features to `regex-syntax`. In particular, this will reduce recompilations in
287some cases.
288
289Bug fixes:
290
291* [BUG #665](https://github.com/rust-lang/regex/pull/665):
292  Fix feature forwarding to `regex-syntax`.
293
294
2951.3.6 (2020-03-24)
296==================
297This release contains a sizable (~30%) performance improvement when compiling
298some kinds of large regular expressions.
299
300Performance improvements:
301
302* [PERF #657](https://github.com/rust-lang/regex/pull/657):
303  Improvement performance of compiling large regular expressions.
304
305
3061.3.5 (2020-03-12)
307==================
308This release updates this crate to Unicode 13.
309
310New features:
311
312* [FEATURE #653](https://github.com/rust-lang/regex/pull/653):
313  Update `regex-syntax` to Unicode 13.
314
315
3161.3.4 (2020-01-30)
317==================
318This is a small bug fix release that fixes a bug related to the scoping of
319flags in a regex. Namely, before this fix, a regex like `((?i)a)b)` would
320match `aB` despite the fact that `b` should not be matched case insensitively.
321
322Bug fixes:
323
324* [BUG #640](https://github.com/rust-lang/regex/issues/640):
325  Fix bug related to the scoping of flags in a regex.
326
327
3281.3.3 (2020-01-09)
329==================
330This is a small maintenance release that upgrades the dependency on
331`thread_local` from `0.3` to `1.0`. The minimum supported Rust version remains
332at Rust 1.28.
333
334
3351.3.2 (2020-01-09)
336==================
337This is a small maintenance release with some house cleaning and bug fixes.
338
339New features:
340
341* [FEATURE #631](https://github.com/rust-lang/regex/issues/631):
342  Add a `Match::range` method an a `From<Match> for Range` impl.
343
344Bug fixes:
345
346* [BUG #521](https://github.com/rust-lang/regex/issues/521):
347  Corrects `/-/.splitn("a", 2)` to return `["a"]` instead of `["a", ""]`.
348* [BUG #594](https://github.com/rust-lang/regex/pull/594):
349  Improve error reporting when writing `\p\`.
350* [BUG #627](https://github.com/rust-lang/regex/issues/627):
351  Corrects `/-/.split("a-")` to return `["a", ""]` instead of `["a"]`.
352* [BUG #633](https://github.com/rust-lang/regex/pull/633):
353  Squash deprecation warnings for the `std::error::Error::description` method.
354
355
3561.3.1 (2019-09-04)
357==================
358This is a maintenance release with no changes in order to try to work-around
359a [docs.rs/Cargo issue](https://github.com/rust-lang/docs.rs/issues/400).
360
361
3621.3.0 (2019-09-03)
363==================
364This release adds a plethora of new crate features that permit users of regex
365to shrink its size considerably, in exchange for giving up either functionality
366(such as Unicode support) or runtime performance. When all such features are
367disabled, the dependency tree for `regex` shrinks to exactly 1 crate
368(`regex-syntax`). More information about the new crate features can be
369[found in the docs](https://docs.rs/regex/*/#crate-features).
370
371Note that while this is a new minor version release, the minimum supported
372Rust version for this crate remains at `1.28.0`.
373
374New features:
375
376* [FEATURE #474](https://github.com/rust-lang/regex/issues/474):
377  The `use_std` feature has been deprecated in favor of the `std` feature.
378  The `use_std` feature will be removed in regex 2. Until then, `use_std` will
379  remain as an alias for the `std` feature.
380* [FEATURE #583](https://github.com/rust-lang/regex/issues/583):
381  Add a substantial number of crate features shrinking `regex`.
382
383
3841.2.1 (2019-08-03)
385==================
386This release does a bit of house cleaning. Namely:
387
388* This repository is now using rustfmt.
389* License headers have been removed from all files, in following suit with the
390  Rust project.
391* Teddy has been removed from the `regex` crate, and is now part of the
392  `aho-corasick` crate.
393  [See `aho-corasick`'s new `packed` sub-module for details](https://docs.rs/aho-corasick/0.7.6/aho_corasick/packed/index.html).
394* The `utf8-ranges` crate has been deprecated, with its functionality moving
395  into the
396  [`utf8` sub-module of `regex-syntax`](https://docs.rs/regex-syntax/0.6.11/regex_syntax/utf8/index.html).
397* The `ucd-util` dependency has been dropped, in favor of implementing what
398  little we need inside of `regex-syntax` itself.
399
400In general, this is part of an ongoing (long term) effort to make optimizations
401in the regex engine easier to reason about. The current code is too convoluted
402and thus it is very easy to introduce new bugs. This simplification effort is
403the primary motivation behind re-working the `aho-corasick` crate to not only
404bundle algorithms like Teddy, but to also provide regex-like match semantics
405automatically.
406
407Moving forward, the plan is to join up with the `bstr` and `regex-automata`
408crates, with the former providing more sophisticated substring search
409algorithms (thereby deleting existing code in `regex`) and the latter providing
410ahead-of-time compiled DFAs for cases where they are inexpensive to compute.
411
412
4131.2.0 (2019-07-20)
414==================
415This release updates regex's minimum supported Rust version to 1.28, which was
416release almost 1 year ago. This release also updates regex's Unicode data
417tables to 12.1.0.
418
419
4201.1.9 (2019-07-06)
421==================
422This release contains a bug fix that caused regex's tests to fail, due to a
423dependency on an unreleased behavior in regex-syntax.
424
425* [BUG #593](https://github.com/rust-lang/regex/issues/593):
426  Move an integration-style test on error messages into regex-syntax.
427
428
4291.1.8 (2019-07-04)
430==================
431This release contains a few small internal refactorings. One of which fixes
432an instance of undefined behavior in a part of the SIMD code.
433
434Bug fixes:
435
436* [BUG #545](https://github.com/rust-lang/regex/issues/545):
437  Improves error messages when a repetition operator is used without a number.
438* [BUG #588](https://github.com/rust-lang/regex/issues/588):
439  Removes use of a repr(Rust) union used for type punning in the Teddy matcher.
440* [BUG #591](https://github.com/rust-lang/regex/issues/591):
441  Update docs for running benchmarks and improve failure modes.
442
443
4441.1.7 (2019-06-09)
445==================
446This release fixes up a few warnings as a result of recent deprecations.
447
448
4491.1.6 (2019-04-16)
450==================
451This release fixes a regression introduced by a bug fix (for
452[BUG #557](https://github.com/rust-lang/regex/issues/557)) which could cause
453the regex engine to enter an infinite loop. This bug was originally
454[reported against ripgrep](https://github.com/BurntSushi/ripgrep/issues/1247).
455
456
4571.1.5 (2019-04-01)
458==================
459This release fixes a bug in regex's dependency specification where it requires
460a newer version of regex-syntax, but this wasn't communicated correctly in the
461Cargo.toml. This would have been caught by a minimal version check, but this
462check was disabled because the `rand` crate itself advertises incorrect
463dependency specifications.
464
465Bug fixes:
466
467* [BUG #570](https://github.com/rust-lang/regex/pull/570):
468  Fix regex-syntax minimal version.
469
470
4711.1.4 (2019-03-31)
472==================
473This release fixes a backwards compatibility regression where Regex was no
474longer UnwindSafe. This was caused by the upgrade to aho-corasick 0.7, whose
475AhoCorasick type was itself not UnwindSafe. This has been fixed in aho-corasick
4760.7.4, which we now require.
477
478Bug fixes:
479
480* [BUG #568](https://github.com/rust-lang/regex/pull/568):
481  Fix an API regression where Regex was no longer UnwindSafe.
482
483
4841.1.3 (2019-03-30)
485==================
486This releases fixes a few bugs and adds a performance improvement when a regex
487is a simple alternation of literals.
488
489Performance improvements:
490
491* [OPT #566](https://github.com/rust-lang/regex/pull/566):
492  Upgrades `aho-corasick` to 0.7 and uses it for `foo|bar|...|quux` regexes.
493
494Bug fixes:
495
496* [BUG #527](https://github.com/rust-lang/regex/issues/527):
497  Fix a bug where the parser would panic on patterns like `((?x))`.
498* [BUG #555](https://github.com/rust-lang/regex/issues/555):
499  Fix a bug where the parser would panic on patterns like `(?m){1,1}`.
500* [BUG #557](https://github.com/rust-lang/regex/issues/557):
501  Fix a bug where captures could lead to an incorrect match.
502
503
5041.1.2 (2019-02-27)
505==================
506This release fixes a bug found in the fix introduced in 1.1.1.
507
508Bug fixes:
509
510* [BUG edf45e6f](https://github.com/rust-lang/regex/commit/edf45e6f):
511  Fix bug introduced in reverse suffix literal matcher in the 1.1.1 release.
512
513
5141.1.1 (2019-02-27)
515==================
516This is a small release with one fix for a bug caused by literal optimizations.
517
518Bug fixes:
519
520* [BUG 661bf53d](https://github.com/rust-lang/regex/commit/661bf53d):
521  Fixes a bug in the reverse suffix literal optimization. This was originally
522  reported
523  [against ripgrep](https://github.com/BurntSushi/ripgrep/issues/1203).
524
525
5261.1.0 (2018-11-30)
527==================
528This is a small release with a couple small enhancements. This release also
529increases the minimal supported Rust version (MSRV) to 1.24.1 (from 1.20.0). In
530accordance with this crate's MSRV policy, this release bumps the minor version
531number.
532
533Performance improvements:
534
535* [OPT #511](https://github.com/rust-lang/regex/pull/511),
536  [OPT #540](https://github.com/rust-lang/regex/pull/540):
537  Improve lazy DFA construction for large regex sets.
538
539New features:
540
541* [FEATURE #538](https://github.com/rust-lang/regex/pull/538):
542  Add Emoji and "break" Unicode properties. See [UNICODE.md](UNICODE.md).
543
544Bug fixes:
545
546* [BUG #530](https://github.com/rust-lang/regex/pull/530):
547  Add Unicode license (for data tables).
548* Various typo/doc fixups.
549
550
5511.0.6 (2018-11-06)
552==================
553This is a small release.
554
555Performance improvements:
556
557* [OPT #513](https://github.com/rust-lang/regex/pull/513):
558  Improve performance of compiling large Unicode classes by 8-10%.
559
560Bug fixes:
561
562* [BUG #533](https://github.com/rust-lang/regex/issues/533):
563  Fix definition of `[[:blank:]]` class that regressed in `regex-syntax 0.5`.
564
565
5661.0.5 (2018-09-06)
567==================
568This is a small release with an API enhancement.
569
570New features:
571
572* [FEATURE #509](https://github.com/rust-lang/regex/pull/509):
573  Generalize impls of the `Replacer` trait.
574
575
5761.0.4 (2018-08-25)
577==================
578This is a small release that bumps the quickcheck dependency.
579
580
5811.0.3 (2018-08-24)
582==================
583This is a small bug fix release.
584
585Bug fixes:
586
587* [BUG #504](https://github.com/rust-lang/regex/pull/504):
588  Fix for Cargo's "minimal version" support.
589* [BUG 1e39165f](https://github.com/rust-lang/regex/commit/1e39165f):
590  Fix doc examples for byte regexes.
591
592
5931.0.2 (2018-07-18)
594==================
595This release exposes some new lower level APIs on `Regex` that permit
596amortizing allocation and controlling the location at which a search is
597performed in a more granular way. Most users of the regex crate will not
598need or want to use these APIs.
599
600New features:
601
602* [FEATURE #493](https://github.com/rust-lang/regex/pull/493):
603  Add a few lower level APIs for amortizing allocation and more fine grained
604  searching.
605
606Bug fixes:
607
608* [BUG 3981d2ad](https://github.com/rust-lang/regex/commit/3981d2ad):
609  Correct outdated documentation on `RegexBuilder::dot_matches_new_line`.
610* [BUG 7ebe4ae0](https://github.com/rust-lang/regex/commit/7ebe4ae0):
611  Correct outdated documentation on `Parser::allow_invalid_utf8` in the
612  `regex-syntax` crate.
613* [BUG 24c7770b](https://github.com/rust-lang/regex/commit/24c7770b):
614  Fix a bug in the HIR printer where it wouldn't correctly escape meta
615  characters in character classes.
616
617
6181.0.1 (2018-06-19)
619==================
620This release upgrades regex's Unicode tables to Unicode 11, and enables SIMD
621optimizations automatically on Rust stable (1.27 or newer).
622
623New features:
624
625* [FEATURE #486](https://github.com/rust-lang/regex/pull/486):
626  Implement `size_hint` on `RegexSet` match iterators.
627* [FEATURE #488](https://github.com/rust-lang/regex/pull/488):
628  Update Unicode tables for Unicode 11.
629* [FEATURE #490](https://github.com/rust-lang/regex/pull/490):
630  SIMD optimizations are now enabled automatically in Rust stable, for versions
631  1.27 and up. No compilation flags or features need to be set. CPU support
632  SIMD is detected automatically at runtime.
633
634Bug fixes:
635
636* [BUG #482](https://github.com/rust-lang/regex/pull/482):
637  Present a better compilation error when the `use_std` feature isn't used.
638
639
6401.0.0 (2018-05-01)
641==================
642This release marks the 1.0 release of regex.
643
644While this release includes some breaking changes, most users of older versions
645of the regex library should be able to migrate to 1.0 by simply bumping the
646version number. The important changes are as follows:
647
648* We adopt Rust 1.20 as the new minimum supported version of Rust for regex.
649  We also tentativley adopt a policy that permits bumping the minimum supported
650  version of Rust in minor version releases of regex, but no patch releases.
651  That is, with respect to semver, we do not strictly consider bumping the
652  minimum version of Rust to be a breaking change, but adopt a conservative
653  stance as a compromise.
654* Octal syntax in regular expressions has been disabled by default. This
655  permits better error messages that inform users that backreferences aren't
656  available. Octal syntax can be re-enabled via the corresponding option on
657  `RegexBuilder`.
658* `(?-u:\B)` is no longer allowed in Unicode regexes since it can match at
659  invalid UTF-8 code unit boundaries. `(?-u:\b)` is still allowed in Unicode
660  regexes.
661* The `From<regex_syntax::Error>` impl has been removed. This formally removes
662  the public dependency on `regex-syntax`.
663* A new feature, `use_std`, has been added and enabled by default. Disabling
664  the feature will result in a compilation error. In the future, this may
665  permit us to support `no_std` environments (w/ `alloc`) in a backwards
666  compatible way.
667
668For more information and discussion, please see
669[1.0 release tracking issue](https://github.com/rust-lang/regex/issues/457).
670
671
6720.2.11 (2018-05-01)
673===================
674This release primarily contains bug fixes. Some of them resolve bugs where
675the parser could panic.
676
677New features:
678
679* [FEATURE #459](https://github.com/rust-lang/regex/pull/459):
680  Include C++'s standard regex library and Boost's regex library in the
681  benchmark harness. We now include D/libphobos, C++/std, C++/boost, Oniguruma,
682  PCRE1, PCRE2, RE2 and Tcl in the harness.
683
684Bug fixes:
685
686* [BUG #445](https://github.com/rust-lang/regex/issues/445):
687  Clarify order of indices returned by RegexSet match iterator.
688* [BUG #461](https://github.com/rust-lang/regex/issues/461):
689  Improve error messages for invalid regexes like `[\d-a]`.
690* [BUG #464](https://github.com/rust-lang/regex/issues/464):
691  Fix a bug in the error message pretty printer that could cause a panic when
692  a regex contained a literal `\n` character.
693* [BUG #465](https://github.com/rust-lang/regex/issues/465):
694  Fix a panic in the parser that was caused by applying a repetition operator
695  to `(?flags)`.
696* [BUG #466](https://github.com/rust-lang/regex/issues/466):
697  Fix a bug where `\pC` was not recognized as an alias for `\p{Other}`.
698* [BUG #470](https://github.com/rust-lang/regex/pull/470):
699  Fix a bug where literal searches did more work than necessary for anchored
700  regexes.
701
702
7030.2.10 (2018-03-16)
704===================
705This release primarily updates the regex crate to changes made in `std::arch`
706on nightly Rust.
707
708New features:
709
710* [FEATURE #458](https://github.com/rust-lang/regex/pull/458):
711  The `Hir` type in `regex-syntax` now has a printer.
712
713
7140.2.9 (2018-03-12)
715==================
716This release introduces a new nightly only feature, `unstable`, which enables
717SIMD optimizations for certain types of regexes. No additional compile time
718options are necessary, and the regex crate will automatically choose the
719best CPU features at run time. As a result, the `simd` (nightly only) crate
720dependency has been dropped.
721
722New features:
723
724* [FEATURE #456](https://github.com/rust-lang/regex/pull/456):
725  The regex crate now includes AVX2 optimizations in addition to the extant
726  SSSE3 optimization.
727
728Bug fixes:
729
730* [BUG #455](https://github.com/rust-lang/regex/pull/455):
731  Fix a bug where `(?x)[ / - ]` failed to parse.
732
733
7340.2.8 (2018-03-12)
735==================
736Bug gixes:
737
738* [BUG #454](https://github.com/rust-lang/regex/pull/454):
739  Fix a bug in the nest limit checker being too aggressive.
740
741
7420.2.7 (2018-03-07)
743==================
744This release includes a ground-up rewrite of the regex-syntax crate, which has
745been in development for over a year.
746
747New features:
748
749* Error messages for invalid regexes have been greatly improved. You get these
750  automatically; you don't need to do anything. In addition to better
751  formatting, error messages will now explicitly call out the use of look
752  around. When regex 1.0 is released, this will happen for backreferences as
753  well.
754* Full support for intersection, difference and symmetric difference of
755  character classes. These can be used via the `&&`, `--` and `~~` binary
756  operators within classes.
757* A Unicode Level 1 conformat implementation of `\p{..}` character classes.
758  Things like `\p{scx:Hira}`, `\p{age:3.2}` or `\p{Changes_When_Casefolded}`
759  now work. All property name and value aliases are supported, and properties
760  are selected via loose matching. e.g., `\p{Greek}` is the same as
761  `\p{G r E e K}`.
762* A new `UNICODE.md` document has been added to this repository that
763  exhaustively documents support for UTS#18.
764* Empty sub-expressions are now permitted in most places. That is, `()+` is
765  now a valid regex.
766* Almost everything in regex-syntax now uses constant stack space, even when
767  performing analysis that requires structural induction. This reduces the risk
768  of a user provided regular expression causing a stack overflow.
769* [FEATURE #174](https://github.com/rust-lang/regex/issues/174):
770  The `Ast` type in `regex-syntax` now contains span information.
771* [FEATURE #424](https://github.com/rust-lang/regex/issues/424):
772  Support `\u`, `\u{...}`, `\U` and `\U{...}` syntax for specifying code points
773  in a regular expression.
774* [FEATURE #449](https://github.com/rust-lang/regex/pull/449):
775  Add a `Replace::by_ref` adapter for use of a replacer without consuming it.
776
777Bug fixes:
778
779* [BUG #446](https://github.com/rust-lang/regex/issues/446):
780  We re-enable the Boyer-Moore literal matcher.
781
782
7830.2.6 (2018-02-08)
784==================
785Bug fixes:
786
787* [BUG #446](https://github.com/rust-lang/regex/issues/446):
788  Fixes a bug in the new Boyer-Moore searcher that results in a match failure.
789  We fix this bug by temporarily disabling Boyer-Moore.
790
791
7920.2.5 (2017-12-30)
793==================
794Bug fixes:
795
796* [BUG #437](https://github.com/rust-lang/regex/issues/437):
797  Fixes a bug in the new Boyer-Moore searcher that results in a panic.
798
799
8000.2.4 (2017-12-30)
801==================
802New features:
803
804* [FEATURE #348](https://github.com/rust-lang/regex/pull/348):
805  Improve performance for capture searches on anchored regex.
806  (Contributed by @ethanpailes. Nice work!)
807* [FEATURE #419](https://github.com/rust-lang/regex/pull/419):
808  Expand literal searching to include Tuned Boyer-Moore in some cases.
809  (Contributed by @ethanpailes. Nice work!)
810
811Bug fixes:
812
813* [BUG](https://github.com/rust-lang/regex/pull/436):
814  The regex compiler plugin has been removed.
815* [BUG](https://github.com/rust-lang/regex/pull/436):
816  `simd` has been bumped to `0.2.1`, which fixes a Rust nightly build error.
817* [BUG](https://github.com/rust-lang/regex/pull/436):
818  Bring the benchmark harness up to date.
819
820
8210.2.3 (2017-11-30)
822==================
823New features:
824
825* [FEATURE #374](https://github.com/rust-lang/regex/pull/374):
826  Add `impl From<Match> for &str`.
827* [FEATURE #380](https://github.com/rust-lang/regex/pull/380):
828  Derive `Clone` and `PartialEq` on `Error`.
829* [FEATURE #400](https://github.com/rust-lang/regex/pull/400):
830  Update to Unicode 10.
831
832Bug fixes:
833
834* [BUG #375](https://github.com/rust-lang/regex/issues/375):
835  Fix a bug that prevented the bounded backtracker from terminating.
836* [BUG #393](https://github.com/rust-lang/regex/issues/393),
837  [BUG #394](https://github.com/rust-lang/regex/issues/394):
838  Fix bug with `replace` methods for empty matches.
839
840
8410.2.2 (2017-05-21)
842==================
843New features:
844
845* [FEATURE #341](https://github.com/rust-lang/regex/issues/341):
846  Support nested character classes and intersection operation.
847  For example, `[\p{Greek}&&\pL]` matches greek letters and
848  `[[0-9]&&[^4]]` matches every decimal digit except `4`.
849  (Much thanks to @robinst, who contributed this awesome feature.)
850
851Bug fixes:
852
853* [BUG #321](https://github.com/rust-lang/regex/issues/321):
854  Fix bug in literal extraction and UTF-8 decoding.
855* [BUG #326](https://github.com/rust-lang/regex/issues/326):
856  Add documentation tip about the `(?x)` flag.
857* [BUG #333](https://github.com/rust-lang/regex/issues/333):
858  Show additional replacement example using curly braces.
859* [BUG #334](https://github.com/rust-lang/regex/issues/334):
860  Fix bug when resolving captures after a match.
861* [BUG #338](https://github.com/rust-lang/regex/issues/338):
862  Add example that uses `Captures::get` to API documentation.
863* [BUG #353](https://github.com/rust-lang/regex/issues/353):
864  Fix RegexSet bug that caused match failure in some cases.
865* [BUG #354](https://github.com/rust-lang/regex/pull/354):
866  Fix panic in parser when `(?x)` is used.
867* [BUG #358](https://github.com/rust-lang/regex/issues/358):
868  Fix literal optimization bug with RegexSet.
869* [BUG #359](https://github.com/rust-lang/regex/issues/359):
870  Fix example code in README.
871* [BUG #365](https://github.com/rust-lang/regex/pull/365):
872  Fix bug in `rure_captures_len` in the C binding.
873* [BUG #367](https://github.com/rust-lang/regex/issues/367):
874  Fix byte class bug that caused a panic.
875
876
8770.2.1
878=====
879One major bug with `replace_all` has been fixed along with a couple of other
880touchups.
881
882* [BUG #312](https://github.com/rust-lang/regex/issues/312):
883  Fix documentation for `NoExpand` to reference correct lifetime parameter.
884* [BUG #314](https://github.com/rust-lang/regex/issues/314):
885  Fix a bug with `replace_all` when replacing a match with the empty string.
886* [BUG #316](https://github.com/rust-lang/regex/issues/316):
887  Note a missing breaking change from the `0.2.0` CHANGELOG entry.
888  (`RegexBuilder::compile` was renamed to `RegexBuilder::build`.)
889* [BUG #324](https://github.com/rust-lang/regex/issues/324):
890  Compiling `regex` should only require one version of `memchr` crate.
891
892
8930.2.0
894=====
895This is a new major release of the regex crate, and is an implementation of the
896[regex 1.0 RFC](https://github.com/rust-lang/rfcs/blob/master/text/1620-regex-1.0.md).
897We are releasing a `0.2` first, and if there are no major problems, we will
898release a `1.0` shortly. For `0.2`, the minimum *supported* Rust version is
8991.12.
900
901There are a number of **breaking changes** in `0.2`. They are split into two
902types. The first type correspond to breaking changes in regular expression
903syntax. The second type correspond to breaking changes in the API.
904
905Breaking changes for regex syntax:
906
907* POSIX character classes now require double bracketing. Previously, the regex
908  `[:upper:]` would parse as the `upper` POSIX character class. Now it parses
909  as the character class containing the characters `:upper:`. The fix to this
910  change is to use `[[:upper:]]` instead. Note that variants like
911  `[[:upper:][:blank:]]` continue to work.
912* The character `[` must always be escaped inside a character class.
913* The characters `&`, `-` and `~` must be escaped if any one of them are
914  repeated consecutively. For example, `[&]`, `[\&]`, `[\&\&]`, `[&-&]` are all
915  equivalent while `[&&]` is illegal. (The motivation for this and the prior
916  change is to provide a backwards compatible path for adding character class
917  set notation.)
918* A `bytes::Regex` now has Unicode mode enabled by default (like the main
919  `Regex` type). This means regexes compiled with `bytes::Regex::new` that
920  don't have the Unicode flag set should add `(?-u)` to recover the original
921  behavior.
922
923Breaking changes for the regex API:
924
925* `find` and `find_iter` now **return `Match` values instead of
926  `(usize, usize)`.** `Match` values have `start` and `end` methods, which
927  return the match offsets. `Match` values also have an `as_str` method,
928  which returns the text of the match itself.
929* The `Captures` type now only provides a single iterator over all capturing
930  matches, which should replace uses of `iter` and `iter_pos`. Uses of
931  `iter_named` should use the `capture_names` method on `Regex`.
932* The `at` method on the `Captures` type has been renamed to `get`, and it
933  now returns a `Match`. Similarly, the `name` method on `Captures` now returns
934  a `Match`.
935* The `replace` methods now return `Cow` values. The `Cow::Borrowed` variant
936  is returned when no replacements are made.
937* The `Replacer` trait has been completely overhauled. This should only
938  impact clients that implement this trait explicitly. Standard uses of
939  the `replace` methods should continue to work unchanged. If you implement
940  the `Replacer` trait, please consult the new documentation.
941* The `quote` free function has been renamed to `escape`.
942* The `Regex::with_size_limit` method has been removed. It is replaced by
943  `RegexBuilder::size_limit`.
944* The `RegexBuilder` type has switched from owned `self` method receivers to
945  `&mut self` method receivers. Most uses will continue to work unchanged, but
946  some code may require naming an intermediate variable to hold the builder.
947* The `compile` method on `RegexBuilder` has been renamed to `build`.
948* The free `is_match` function has been removed. It is replaced by compiling
949  a `Regex` and calling its `is_match` method.
950* The `PartialEq` and `Eq` impls on `Regex` have been dropped. If you relied
951  on these impls, the fix is to define a wrapper type around `Regex`, impl
952  `Deref` on it and provide the necessary impls.
953* The `is_empty` method on `Captures` has been removed. This always returns
954  `false`, so its use is superfluous.
955* The `Syntax` variant of the `Error` type now contains a string instead of
956  a `regex_syntax::Error`. If you were examining syntax errors more closely,
957  you'll need to explicitly use the `regex_syntax` crate to re-parse the regex.
958* The `InvalidSet` variant of the `Error` type has been removed since it is
959  no longer used.
960* Most of the iterator types have been renamed to match conventions. If you
961  were using these iterator types explicitly, please consult the documentation
962  for its new name. For example, `RegexSplits` has been renamed to `Split`.
963
964A number of bugs have been fixed:
965
966* [BUG #151](https://github.com/rust-lang/regex/issues/151):
967  The `Replacer` trait has been changed to permit the caller to control
968  allocation.
969* [BUG #165](https://github.com/rust-lang/regex/issues/165):
970  Remove the free `is_match` function.
971* [BUG #166](https://github.com/rust-lang/regex/issues/166):
972  Expose more knobs (available in `0.1`) and remove `with_size_limit`.
973* [BUG #168](https://github.com/rust-lang/regex/issues/168):
974  Iterators produced by `Captures` now have the correct lifetime parameters.
975* [BUG #175](https://github.com/rust-lang/regex/issues/175):
976  Fix a corner case in the parsing of POSIX character classes.
977* [BUG #178](https://github.com/rust-lang/regex/issues/178):
978  Drop the `PartialEq` and `Eq` impls on `Regex`.
979* [BUG #179](https://github.com/rust-lang/regex/issues/179):
980  Remove `is_empty` from `Captures` since it always returns false.
981* [BUG #276](https://github.com/rust-lang/regex/issues/276):
982  Position of named capture can now be retrieved from a `Captures`.
983* [BUG #296](https://github.com/rust-lang/regex/issues/296):
984  Remove winapi/kernel32-sys dependency on UNIX.
985* [BUG #307](https://github.com/rust-lang/regex/issues/307):
986  Fix error on emscripten.
987
988
9890.1.80
990======
991* [PR #292](https://github.com/rust-lang/regex/pull/292):
992  Fixes bug #291, which was introduced by PR #290.
993
9940.1.79
995======
996* Require regex-syntax 0.3.8.
997
9980.1.78
999======
1000* [PR #290](https://github.com/rust-lang/regex/pull/290):
1001  Fixes bug #289, which caused some regexes with a certain combination
1002  of literals to match incorrectly.
1003
10040.1.77
1005======
1006* [PR #281](https://github.com/rust-lang/regex/pull/281):
1007  Fixes bug #280 by disabling all literal optimizations when a pattern
1008  is partially anchored.
1009
10100.1.76
1011======
1012* Tweak criteria for using the Teddy literal matcher.
1013
10140.1.75
1015======
1016* [PR #275](https://github.com/rust-lang/regex/pull/275):
1017  Improves match verification performance in the Teddy SIMD searcher.
1018* [PR #278](https://github.com/rust-lang/regex/pull/278):
1019  Replaces slow substring loop in the Teddy SIMD searcher with Aho-Corasick.
1020* Implemented DoubleEndedIterator on regex set match iterators.
1021
10220.1.74
1023======
1024* Release regex-syntax 0.3.5 with a minor bug fix.
1025* Fix bug #272.
1026* Fix bug #277.
1027* [PR #270](https://github.com/rust-lang/regex/pull/270):
1028  Fixes bugs #264, #268 and an unreported where the DFA cache size could be
1029  drastically under estimated in some cases (leading to high unexpected memory
1030  usage).
1031
10320.1.73
1033======
1034* Release `regex-syntax 0.3.4`.
1035* Bump `regex-syntax` dependency version for `regex` to `0.3.4`.
1036
10370.1.72
1038======
1039* [PR #262](https://github.com/rust-lang/regex/pull/262):
1040  Fixes a number of small bugs caught by fuzz testing (AFL).
1041
10420.1.71
1043======
1044* [PR #236](https://github.com/rust-lang/regex/pull/236):
1045  Fix a bug in how suffix literals were extracted, which could lead
1046  to invalid match behavior in some cases.
1047
10480.1.70
1049======
1050* [PR #231](https://github.com/rust-lang/regex/pull/231):
1051  Add SIMD accelerated multiple pattern search.
1052* [PR #228](https://github.com/rust-lang/regex/pull/228):
1053  Reintroduce the reverse suffix literal optimization.
1054* [PR #226](https://github.com/rust-lang/regex/pull/226):
1055  Implements NFA state compression in the lazy DFA.
1056* [PR #223](https://github.com/rust-lang/regex/pull/223):
1057  A fully anchored RegexSet can now short-circuit.
1058
10590.1.69
1060======
1061* [PR #216](https://github.com/rust-lang/regex/pull/216):
1062  Tweak the threshold for running backtracking.
1063* [PR #217](https://github.com/rust-lang/regex/pull/217):
1064  Add upper limit (from the DFA) to capture search (for the NFA).
1065* [PR #218](https://github.com/rust-lang/regex/pull/218):
1066  Add rure, a C API.
1067
10680.1.68
1069======
1070* [PR #210](https://github.com/rust-lang/regex/pull/210):
1071  Fixed a performance bug in `bytes::Regex::replace` where `extend` was used
1072  instead of `extend_from_slice`.
1073* [PR #211](https://github.com/rust-lang/regex/pull/211):
1074  Fixed a bug in the handling of word boundaries in the DFA.
1075* [PR #213](https://github.com/rust-lang/pull/213):
1076  Added RE2 and Tcl to the benchmark harness. Also added a CLI utility from
1077  running regexes using any of the following regex engines: PCRE1, PCRE2,
1078  Oniguruma, RE2, Tcl and of course Rust's own regexes.
1079
10800.1.67
1081======
1082* [PR #201](https://github.com/rust-lang/regex/pull/201):
1083  Fix undefined behavior in the `regex!` compiler plugin macro.
1084* [PR #205](https://github.com/rust-lang/regex/pull/205):
1085  More improvements to DFA performance. Competitive with RE2. See PR for
1086  benchmarks.
1087* [PR #209](https://github.com/rust-lang/regex/pull/209):
1088  Release 0.1.66 was semver incompatible since it required a newer version
1089  of Rust than previous releases. This PR fixes that. (And `0.1.66` was
1090  yanked.)
1091
10920.1.66
1093======
1094* Speculative support for Unicode word boundaries was added to the DFA. This
1095  should remove the last common case that disqualified use of the DFA.
1096* An optimization that scanned for suffix literals and then matched the regular
1097  expression in reverse was removed because it had worst case quadratic time
1098  complexity. It was replaced with a more limited optimization where, given any
1099  regex of the form `re$`, it will be matched in reverse from the end of the
1100  haystack.
1101* [PR #202](https://github.com/rust-lang/regex/pull/202):
1102  The inner loop of the DFA was heavily optimized to improve cache locality
1103  and reduce the overall number of instructions run on each iteration. This
1104  represents the first use of `unsafe` in `regex` (to elide bounds checks).
1105* [PR #200](https://github.com/rust-lang/regex/pull/200):
1106  Use of the `mempool` crate (which used thread local storage) was replaced
1107  with a faster version of a similar API in @Amanieu's `thread_local` crate.
1108  It should reduce contention when using a regex from multiple threads
1109  simultaneously.
1110* PCRE2 JIT benchmarks were added. A benchmark comparison can be found
1111  [here](https://gist.github.com/anonymous/14683c01993e91689f7206a18675901b).
1112  (Includes a comparison with PCRE1's JIT and Oniguruma.)
1113* A bug where word boundaries weren't being matched correctly in the DFA was
1114  fixed. This only affected use of `bytes::Regex`.
1115* [#160](https://github.com/rust-lang/regex/issues/160):
1116  `Captures` now has a `Debug` impl.
1117