Perl: the Markov chain saw | |
PerlMonks |
RE: RE: RE: RE: Primesby btrott (Parson) |
on Apr 07, 2000 at 21:40 UTC ( [id://7143]=note: print w/replies, xml ) | Need Help?? |
1) The regex works because of backtracking. Perl's regular
expressions *want* to match, and they keep trying until
they've exhausted every possibility that will let them
match. Once you understand that, you'll understand why it "doesn't" match the whole string in $_. I say "doesn't" because you're right, in a sense--the pattern *does* match the entire string. But then it moves on to the next part of the regex (the \1+) and sees that, if the first part matches the entire string, there's nothing left for the \1+ to match. So the regex wouldn't match. So the matcher moves back one x in the string, and tries to match again; and it keeps moving backwards (backtracking) through the string until it finds a match. If it doesn't find a match, the match fails, and you have a prime--because there is no pattern such that the pattern repeated a certain number of times matches the string; and since the string is x repeated N number of times, this means that there is no number such that the number times another number equals the original number. That sounded confusing--I suppose that's why symbolic notation was invented. :) For more on backtracking, look in perlre. 2) \1 is used because \1 is used "inside" of a pattern (on the left-hand side of a substitution operator, or inside a matching operator); you use $1 "outside" of a pattern (on the right-hand side of a substitution operator, or outside a matching operator). More in perlre.
In Section
Craft
|
|