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