in reply to Re^2: Backref in a regex quantifier
in thread Backref in a regex quantifier

does anyone know if backrefs are supposed to work within the {} quantifier, or not?

Good question.

My guess would be that they're not supposed to work -- text matched in a backreference is matched textually, without metacharacters. So doing /^(.)\1$/ won't match a wildcard as a second character if the first is a literal ".", and won't match one or more "+" if the first character is a literal "+".

Keeping to that pattern, it makes sense that if a backreference appears between {}, what's parsed is a literal "{", the backreference, and a literal "}".

It would obviously complicate regexen something fierce if the possibility of recompiling the regex based on backreferences had to be handled in the general case, and not just in the ??{} case.


Mike

Replies are listed 'Best First'.
Re^4: Backref in a regex quantifier
by TimToady (Parson) on Jul 09, 2007 at 20:00 UTC
    All these problems are the fallout from the design mistake of considering regexen to be strings. In Perl 6 they are not strings, but merely programs in a specialized language that doesn't have to understand backreferences because it can get by with understanding variables, which include variables bound to earlier matches. Thus in Perl 6 you can just say
    / (\d+) x**{$0} /
    to do this very naturally. Also note that no recompilation of the closure returning the repeat count need be done here, since the closure is also real program and compiled only once. The only thing that changes is the binding of $0. (The numbered captures start at 0 rather than 1 in Perl 6 for consistency with the array view of the same data.)