this post was submitted on 31 Oct 2024
330 points (97.1% liked)
Programmer Humor
32472 readers
1043 users here now
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
So, here's my attempt
The first portion (
^.?$
) matches all lines of 0 or 1 characters.The second portion (
^(..+?)\1+$
) is more complicated:(..+?)
is a capture group that matches the first character in any line, followed by a smallest possible non-zero number of characters such that (2) still matches (note that the minimum length of this match is 2)\1+
matches as many as possible (and more than 0) repeats of the (1) groupI think what this does is match any line consisting of a single character with the length
1
(due to the note in (1), so that the repeating portion has to be at least 2 characters long), orTherefore, combined with the first portion, it matches all lines of the same character whose lengths are composite (non-prime) numbers? (it will also match any line of length 1, and all lines consisting of the same string repeated more than one time)
So this is a definite example of "regex" that's not regular, then. I really don't think there's any finite state machine that can track every possible number of string repeats separately.
Yeah backreferences in general are not "regular" in the mathematical sense.