Does anyone know of any more efficient methods than the following to calculate all the matches of a regex?
Thanks.
Thanks.
Code Select
(define (regex-all regexp str all)
"Find all occurrences of a regex in a string"
(let ( (out '()) (idx 0) (res nil) )
(setq res (regex regexp str 64 idx))
(while res
(push res out -1)
(if all
(setq idx (+ (res 1) 1)) ; contiguos pattern (overlap)
(setq idx (+ (res 1) (res 2)))) ; no contiguos pattern
(setq res (regex regexp str 64 idx)))
out))
(setq a "AAAaBAAAABcADccAAAB")
(regex "[A]{3}" a)
;-> ("AAA" 0 3)
(regex-all "[A]{3}" a)
;-> (("AAA" 0 3) ("AAA" 5 3) ("AAA" 15 3))
(regex-all "[A]{3}" a true)
;-> (("AAA" 0 3) ("AAA" 5 3) ("AAA" 6 3) ("AAA" 15 3))