-
Notifications
You must be signed in to change notification settings - Fork 15
Support backreferences #43
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is needed
Description
As discussed on the lambdaisland channel of the clojurians slack (https://clojurians.slack.com/archives/C1DV21X9P/p1643329544995089)
I'm trying to replicate this in regal using a backrefernce to match any 3 or more of the same consecutive character:
;;=> ["1111" "1"]``` But can't seem to get it: ```(regal/regex [:cat [:capture :any] [:repeat ::_ 3 nil]] {:resolver (fn [x] "\\1")}) ;;=> #"(.)(?:\\1){3,}" (regal/regex [:capture [:capture :any] [:repeat ::_ 3 nil]] {:resolver (fn [x] "\1")}) ;;=> #"((.){3,})" (regal/regex [:capture [:capture :any] [:repeat ::_ 3 nil]] {:resolver (fn [x] "\\\\1")}) ;;=> #"((.)(?:\\\\1){3,})"``` Any tips?
@plexus Responded:
(ns repl-sessions.poke (:require [lambdaisland.regal :as regal] [lambdaisland.regal.parse :as regal-parse])) (regal-parse/parse #"(.)\1{3,}") ;; => [:cat ;; [:capture :any] ;; [:repeat [:lambdaisland.regal.parse/not-implemented [:BackReference "1"]] 3]]backreferences aren't implemented, but seems like a common enough feature that they should be. Would you mind creating a ticket?
here's a workaround you can do yourself:
(defmethod regal/-regal->ir [:ref :common] [[op idx] opts] `^::regal/grouped ("\\" ~(str idx))) (regal/regex [:cat [:capture :any] [:repeat [:ref 1] 3 nil]]) ;; => #"(.)\1{3,}"
It was also questioned if all engines, Java, ECMA, Re2 support this. It looks the like the first two do but Re2 doesn't
google/re2#101
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is needed
Type
Projects
Status
🙈Out of Scope