From: Barry Warsaw Date: Tue, 18 Feb 1997 18:52:55 +0000 (+0000) Subject: Store the current regex syntax along with the regular expression X-Git-Tag: v1.5a1~346 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b67a25c0794d4a2c4f4907a8eb021750c11b1de4;p=thirdparty%2FPython%2Fcpython.git Store the current regex syntax along with the regular expression string as the key to the cache. This means that changing the syntax will return the correct compiled pattern. clear_cache(): New function. --- diff --git a/Lib/regsub.py b/Lib/regsub.py index c87ac262aa2d..8fb33065ed22 100644 --- a/Lib/regsub.py +++ b/Lib/regsub.py @@ -109,27 +109,32 @@ def capwords(str, pat='[^a-zA-Z0-9_]+'): # Manage a cache of compiled regular expressions. -# If the pattern is a string a compiled version of it is returned. -# If the pattern has been used before we return an already compiled +# +# If the pattern is a string a compiled version of it is returned. If +# the pattern has been used before we return an already compiled # version from the cache; otherwise we compile it now and save the -# compiled version in the cache. -# Instead of a string, a compiled regular expression can also be -# passed. -# WARNING: if the pattern syntax is changed, the cache should be -# flushed! +# compiled version in the cache, along with the syntax it was compiled +# with. Instead of a string, a compiled regular expression can also +# be passed. cache = {} def compile(pat): if type(pat) <> type(''): return pat # Assume it is a compiled regex - if cache.has_key(pat): - prog = cache[pat] # Get it from the cache + key = (pat, regex.get_syntax()) + if cache.has_key(key): + prog = cache[key] # Get it from the cache else: - prog = cache[pat] = regex.compile(pat) + prog = cache[key] = regex.compile(pat) return prog +def clear_cache(): + global cache + cache = {} + + # Expand \digit in the replacement. # Each occurrence of \digit is replaced by the substring of str # indicated by regs[digit]. To include a literal \ in the