Commit ba3cc47
committed
docs: document backtracking clears capture in conditional regex (gh-151819)
Closes #151819
The (?(id/name)yes-pattern|no-pattern) documentation claims an
example pattern (<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$) will not match
'<user@host.com'. In fact the engine matches 'user@host.com'
because the leading < capture group is rerolled when the
yes-pattern cannot consume the trailing >. The same backtracking
behaviour occurs in simpler cases such as (<)?\w+(?(1)>) matching
only '3' from '<3'.
This change documents the backtracking semantics explicitly and
corrects the embedded example. Adds a regression test that locks
in the visible behavior.1 parent 476b649 commit ba3cc47
3 files changed
Lines changed: 46 additions & 3 deletions
File tree
- Doc/library
- Lib/test
- Misc/NEWS.d/next/Documentation
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
508 | 508 | | |
509 | 509 | | |
510 | 510 | | |
511 | | - | |
512 | | - | |
513 | | - | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
514 | 522 | | |
515 | 523 | | |
516 | 524 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
706 | 706 | | |
707 | 707 | | |
708 | 708 | | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
709 | 740 | | |
710 | 741 | | |
711 | 742 | | |
| |||
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
0 commit comments