diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2022-03-22 15:27:55 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-22 15:27:55 (GMT) |
commit | 492d4109f4d953c478cb48f17aa32adbb912623b (patch) | |
tree | c912b908f3e247d161901c0794bb28753759b796 /Modules | |
parent | 32e77154ddfc514a3144d5912bffdd957246fd6c (diff) | |
download | cpython-492d4109f4d953c478cb48f17aa32adbb912623b.zip cpython-492d4109f4d953c478cb48f17aa32adbb912623b.tar.gz cpython-492d4109f4d953c478cb48f17aa32adbb912623b.tar.bz2 |
bpo-42885: Optimize search for regular expressions starting with "\A" or "^" (GH-32021)
Affected functions are re.search(), re.split(), re.findall(), re.finditer()
and re.sub().
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/sre_lib.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h index 956fd3f..a82210f 100644 --- a/Modules/sre_lib.h +++ b/Modules/sre_lib.h @@ -1693,6 +1693,13 @@ SRE(search)(SRE_STATE* state, SRE_CODE* pattern) state->start = state->ptr = ptr; status = SRE(match)(state, pattern, 1); state->must_advance = 0; + if (status == 0 && pattern[0] == SRE_OP_AT && + (pattern[1] == SRE_AT_BEGINNING || + pattern[1] == SRE_AT_BEGINNING_STRING)) + { + state->start = state->ptr = ptr = end; + return 0; + } while (status == 0 && ptr < end) { ptr++; RESET_CAPTURE_GROUP(); |