kopia lustrzana https://github.com/micropython/micropython-lib
re-pcre: Allocate match span array of needed size.
rodzic
74d5eccc98
commit
a943b0f2e8
|
@ -14,12 +14,19 @@ pcre_compile = pcre.func("p", "pcre_compile", "sipps")
|
|||
# int options, int *ovector, int ovecsize);
|
||||
pcre_exec = pcre.func("i", "pcre_exec", "ppsiiipi")
|
||||
|
||||
# int pcre_fullinfo(const pcre *code, const pcre_extra *extra,
|
||||
# int what, void *where);
|
||||
pcre_fullinfo = pcre.func("i", "pcre_fullinfo", "ppip")
|
||||
|
||||
|
||||
IGNORECASE = I = 1
|
||||
MULTILINE = M = 2
|
||||
DOTALL = S = 4
|
||||
VERBOSE = X = 8
|
||||
PCRE_ANCHORED = 0x10
|
||||
|
||||
PCRE_INFO_CAPTURECOUNT = 2
|
||||
|
||||
|
||||
class PCREMatch:
|
||||
|
||||
|
@ -38,7 +45,10 @@ class PCREPattern:
|
|||
self.obj = compiled_ptn
|
||||
|
||||
def search(self, s, _flags=0):
|
||||
ov = array.array('i', [0, 0, 0] * 2)
|
||||
buf = bytes(4)
|
||||
pcre_fullinfo(self.obj, None, PCRE_INFO_CAPTURECOUNT, buf)
|
||||
cap_count = int.from_bytes(buf)
|
||||
ov = array.array('i', [0, 0, 0] * (cap_count + 1))
|
||||
num = pcre_exec(self.obj, None, s, len(s), 0, _flags, ov, len(ov))
|
||||
if num == -1:
|
||||
# No match
|
||||
|
|
Ładowanie…
Reference in New Issue