Re: Regular expression for years after a given one
[email protected] (Peter Scott)
| Newsgroups | gmane.comp.lang.perl.fun |
|---|---|
| Organization | Pacific Systems Design Technologies |
| Message-ID | <[email protected]> |
In article <[email protected]>, [email protected] (Jose Alves De Castro) writes: >Yesterday, a friend of mine was toying around with some Perl code, when >he got to a function which would only accept a regular expression. He >said: > >"How can I say that I want every single year after the one I have? It's >impossible..." > >To which I replied: > >"Nothing is impossible! Especially in Perl! ;-) " (ok, maybe these >weren't my words at the time, but they seem cool now, right? :-) ) > >So after a couple of minutes, this is what I came up with: > > >$year = 2004; # I'm stating it directly to improve clarity > >$year =~/(\d)(\d)(\d)(\d)/; > >($c,$d,$e,$f) = ($4+1,$3+1,$2+1,$1+1); > >$regex = >qr/^\d*(?:${1}${2}${3}[$c-9]|${1}$2[$d-9]\d|$1[$e-9]\d{2}|[$f-9]\d{3})$/; > > >and that does the trick :-) > >Thought I should share this with you guys :-) Thoughts are welcome :-) > > >BTW: This was made so it would work with $year consisting of four >digits... any care to make it generic? :-) Maybe this is pooping at your party, but it seems to me that $regex = qr/^(\d+)(??{ $1 > $year ? "" : "(?!)" })$/ handles the generic case as well. -- Peter Scott http://www.perldebugged.com/ *** NEW *** http://www.perlmedic.com/