Within a regex, parentheses make a capture. Captures are numbered 1, 2, ..., in the same order as they occur within the regex, and, within the regex, \1, \2, etc. correspond to the capture groups captured first, second, etc. (Outside the regex, the captures are named $1, $2, etc.)
The regex /y(.)(.)\2\1/ matches any 5-character sequence having the following form: a literal “y”, followed by any two non-newline characters, followed by the same character as was matched in the second capture group, followed by the same character as was matched in the first capture group.
So, “abba” does not match, because it doesn’t contain a literal “y”. But “yabba” matches, as do “yukku”, “ywzzw”, “y1@@1”, etc.
See the section “Capture groups” in perlre#Regular-Expressions.
Hope that helps,
| [reply] [Watch: Dir/Any] [d/l] [select] |
Thanks for the clarification :)
| [reply] [Watch: Dir/Any] |
"From what I understand, \1 matches any character except \n after ...."
Athanasius response is a good one, but, IMO, invites an alternate way to address a key element of your misconception. You can think of \1 and $1 as containers used to (temporarily) retain the matches found by the wildcards .
But \1 and $1 do NOT match anything, per se.
Explaining "temporarily is beyond the scope of this thread; just take care to assign the value in $1 (or any other of its ilk) to an ordinary, named variable (without $1's idiosyncrasies) as promptly as possible.
If you didn't program your executable by toggling in binary, it wasn't really programming!
| [reply] [Watch: Dir/Any] [d/l] [select] |